Java &引用;使用布尔文字“quot;”的相等性测试测试布尔值与使用布尔值的区别==
我正在使用以查看我的应用程序代码和随消息报告的工具: 警告:使用布尔文字进行相等性测试 对于此代码:Java &引用;使用布尔文字“quot;”的相等性测试测试布尔值与使用布尔值的区别==,java,coding-style,codepro,Java,Coding Style,Codepro,我正在使用以查看我的应用程序代码和随消息报告的工具: 警告:使用布尔文字进行相等性测试 对于此代码: boolean valid; if(valid == true) 可通过以下方式固定: if(valid) 我脑子里有两个问题: 这只是一个好的编码实践吗 在内存优化或优化方面还有其他好处吗 性能优化 行为上没有区别,虽然我不能对每个JVM都权威地发言,但很难想象会有任何性能上的差异。我认为这是一种更好的做法。第一,代码更紧凑。第二,代码读起来更像自然语言 我不知道这样或那样有什么好处。我
boolean valid;
if(valid == true)
可通过以下方式固定:
if(valid)
我脑子里有两个问题:
行为上没有区别,虽然我不能对每个JVM都权威地发言,但很难想象会有任何性能上的差异。我认为这是一种更好的做法。第一,代码更紧凑。第二,代码读起来更像自然语言
我不知道这样或那样有什么好处。我的猜测是,Java编译器非常成熟,两个选项的性能几乎相同。对于更直接的布尔表达式:
boolean valid = true;
if(valid) {
}
生成以下字节码:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq 6
6: return
0: iconst_1
1: istore_1
2: iload_1
3: iconst_1
4: if_icmpne 7
7: return
鉴于扩大比较:
boolean valid = true;
if(valid == true) {
}
生成以下字节码:
0: iconst_1
1: istore_1
2: iload_1
3: ifeq 6
6: return
0: iconst_1
1: istore_1
2: iload_1
3: iconst_1
4: if_icmpne 7
7: return
我怀疑ifeq
和if\u icmpne
的执行速度不同,因此if(valid==true)
的额外成本实际上只是额外的常量值,可以忽略不计
总而言之,这并没有真正的性能差异,CodePro只是将您的代码标记为最佳实践
这只是一个好的编码实践吗
对。原因有二:
习语冗长且语言丑陋。(你会问:“教皇是天主教徒吗?”还是“教皇是天主教徒?”…)b==true
习惯用法是Java中唯一一种可能被误写为b==true
的情况b=true
无论哪种方式,差异都可能太小而不是太小而不是太大。对于我提出的第一个问题,是的,这是一个很好的做法。关于第二个问题,我没有任何专业知识,但我的直觉是,至少在内存优化或性能方面应该是一样好的optimization@Tako我希望你的意思是
如果(有效)
是一个好的做法。将布尔值与true
进行比较是个坏主意。阿什:道理很简单2
为true,但2==true
为false。更一般地说,任何非零的值都是真的。如果您认为编写If(valid==true)
更好,那么为什么不If(!((valid==true)!=false&&(!valid!=true))==!true)
?@MattBall的精确副本呢。谢谢,侧边栏!非常感谢你的解释。我认为这有助于提高可读性if(isValid)
比if(isValid==true)
读起来更好。