我正在使用Code Pro来审核我的应用程序代码,并使用以下消息报告该工具:
警告:使用布尔文字
进行相等性测试
对于此代码:
boolean valid;
if(valid == true)
可以使用以下方法修复:
if(valid)
我有两个问题在想:
答案 0 :(得分:5)
对于更直接的布尔表达式:
boolean valid = true;
if(valid) {
}
生成以下字节代码:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq 6
6: return
而扩展比较:
boolean valid = true;
if(valid == true) {
}
生成以下字节代码:
0: iconst_1
1: istore_1
2: iload_1
3: iconst_1
4: if_icmpne 7
7: return
我怀疑ifeq
和if_icmpne
执行速度不同,因此if(valid == true)
的额外费用实际上只是额外的常数值,这可以忽略不计。
总而言之,实际上没有任何性能差异,CodePro将您的代码标记为最佳实践。
答案 1 :(得分:1)
我想说这是一个很好的做法。一,代码更紧凑。第二,代码更像是自然语言。
我不知道这种或那种方式是否有任何好处。我的猜测是Java编译器非常成熟,两个选项的表现大致相同。
答案 2 :(得分:1)
这只是一个很好的编码实践吗?
是。有两个原因:
b == true
成语冗长且语言丑陋。 (你会问,“教皇是天主教徒吗?”或者“是教皇天主教徒吗?”......?)
b == true
成语是Java中唯一一个可以错过b = true
的案例。
在内存优化或性能优化方面还有其他好处吗?
几乎肯定不会。
当两位代码导致不同的字节码时,JIT编译器很可能将它们转换为相同的本机指令序列或具有相同性能的序列。 (如果没有,那么优化器“错过了一个技巧”)。
无论哪种方式,差异可能太小而不是太小而不显着。
答案 3 :(得分:0)
行为没有区别,虽然我不能以权威的方式对每个JVM说话,但很难想象会有任何性能差异。