两个变量组合判空,idea智能提示Condition ‘b == null‘ is always ‘true‘ when reached

我一直都是用的idea,不得不说,真的是很智能、很顺手。所以在代码中碰到提示,我都会看一下,然后思考一下,为什么这么提示,是否有优化的地方。最令我满意的是这个发现是:idea这么牛,居然能判断当前环境线程是否安全????。今天在码代码时,又发现了一个idea的提示,让我思考了好一会儿

代码也很简单,如下:
两个变量组合判空,idea智能提示Condition ‘b == null‘ is always ‘true‘ when reached
有两个变量,我要组合判断他们为非空的情况,我按照我的想法写:1. a为空,b不为空;2. a不为空,b为空 ……当我写完之后发现,在第三种情况的判断下,idea给出了一个黄色的提示:
两个变量组合判空,idea智能提示Condition ‘b == null‘ is always ‘true‘ when reached
Condition ‘b == null’ is always ‘true’ when reached,我当时翻译的比较糙,意思就是 b永远为null,这是咋回事呢?为啥b永远为null。我知道if……else if……else……具有互斥性,我就开始分析:

  • 如果不走第一个判断,那么可以得到两点结论:
  1. a不为null时,b一定不为null
  2. a为null时,b可以为null也可以不为null。

第2点是废话,但是第1点是有效的结论。

  • 如果不走第二个判断,那么也可以得到两个结论:
  1. a为null时,b一定为null,
  2. a不为null时,b可以为null也可以不为null。

第4点是废话,但是第3点是有效的结论。

所以,如果前两个判断都不走,走到第三个判断,那么可以得到两点有效结论:

  • a不为null时,b一定不为null
  • a为null时,b一定为null,

所以,当我在写else if (a == null && b == null),写到a==null时,idea就非常智能的提示:Condition ‘b == null’ is always ‘true’ when reached,因为此时b一定为null,&& b == null 是多余的。

其实仔细想想也是,如果除开了上面最先的两种情况,if (a != null && b == null)和(a == null && b != null),那么剩下的只有 a==null && b==null 和a !=null && b != null。当a==null时,b就不用判断了,一定是null。只是按照常人的思维,一定一按照:当 a为空,b不为空;当a不为空,b为空 ;当a为空,b为空;当a不为空,b不为空的逻辑去写的 。

上一篇:个人对handler的理解


下一篇:SQL26 计算25岁以上和以下的用户数量 if函数 或者 case条件 或者 联合表