我一直都是用的idea,不得不说,真的是很智能、很顺手。所以在代码中碰到提示,我都会看一下,然后思考一下,为什么这么提示,是否有优化的地方。最令我满意的是这个发现是:idea这么牛,居然能判断当前环境线程是否安全????。今天在码代码时,又发现了一个idea的提示,让我思考了好一会儿
代码也很简单,如下:
有两个变量,我要组合判断他们为非空的情况,我按照我的想法写:1. a为空,b不为空;2. a不为空,b为空 ……当我写完之后发现,在第三种情况的判断下,idea给出了一个黄色的提示:
Condition ‘b == null’ is always ‘true’ when reached,我当时翻译的比较糙,意思就是 b永远为null,这是咋回事呢?为啥b永远为null。我知道if……else if……else……具有互斥性,我就开始分析:
- 如果不走第一个判断,那么可以得到两点结论:
- a不为null时,b一定不为null
- a为null时,b可以为null也可以不为null。
第2点是废话,但是第1点是有效的结论。
- 如果不走第二个判断,那么也可以得到两个结论:
- a为null时,b一定为null,
- 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不为空的逻辑去写的 。