“使用布尔文字进行平等测试” - 测试布尔值和使用==之间的差异

时间:2013-03-23 04:38:00

标签: java coding-style codepro

我正在使用Code Pro来审核我的应用程序代码,并使用以下消息报告该工具:

  

警告:使用布尔文字

进行相等性测试

对于此代码:

boolean valid;
if(valid == true)

可以使用以下方法修复:

if(valid) 

我有两个问题在想:

  1. 这只是一个很好的编码实践吗?
  2. 在内存优化方面还有其他好处吗?    性能优化?

4 个答案:

答案 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

我怀疑ifeqif_icmpne执行速度不同,因此if(valid == true)的额外费用实际上只是额外的常数值,这可以忽略不计。

总而言之,实际上没有任何性能差异,CodePro将您的代码标记为最佳实践。

答案 1 :(得分:1)

我想说这是一个很好的做法。一,代码更紧凑。第二,代码更像是自然语言。

我不知道这种或那种方式是否有任何好处。我的猜测是Java编译器非常成熟,两个选项的表现大致相同。

答案 2 :(得分:1)

  

这只是一个很好的编码实践吗?

是。有两个原因:

  • b == true成语冗长且语言丑陋。 (你会问,“教皇是天主教徒吗?”或者“是教皇天主教徒吗?”......?)

  • b == true成语是Java中唯一一个可以错过b = true的案例。

  

在内存优化或性能优化方面还有其他好处吗?

几乎肯定不会。

当两位代码导致不同的字节码时,JIT编译器很可能将它们转换为相同的本机指令序列或具有相同性能的序列。 (如果没有,那么优化器“错过了一个技巧”)。

无论哪种方式,差异可能太小而不是太小而不显着。

答案 3 :(得分:0)

行为没有区别,虽然我不能以权威的方式对每个JVM说话,但很难想象会有任何性能差异。