在Java中显式比较布尔常量(例如if(b == false))是否不好?

2022-08-31 12:49:24

写:

if (b == false) //...

while (b != true) //...

写:

if (!b) //...

while (!b) //...

据推测,在性能上没有区别(或者存在差异?),但是您如何权衡两者之间的明确性,简洁性,清晰度,可读性等?

更新

为了限制主观性,我也希望从权威编码风格指南中引用任何引用,而不是哪个总是更可取的,或者在什么时候使用哪个。


注意:变量名称仅用作示例,ala 和 .bfoobar


答案 1

这不一定是坏事,只是多余的。此外,实际的变量名称权重很大。例如,我更喜欢甚至更糟。if (userIsAllowedToLogin)if (b)if (flag)

至于性能问题,编译器会以任何方式对其进行优化。

至于权威来源,我无法在最初由Sun编写的Java代码约定中找到明确的东西,但至少Checkstyle有一个SimplifyBooleanExpression模块,可以警告这一点。


答案 2

不应使用第一种样式。我见过人们使用:

  • if ( b == true )
  • if ( b == false )

我个人觉得很难读,但它是可以接受的。但是,我对这种风格的一个大问题是,它导致了你展示的令人难以置信的反直觉的例子:

  • if ( b != true )
  • if ( b != false )

这需要读者付出更多的努力来确定作者的意图。就个人而言,我发现包括与真或假的明确比较是多余的,因此更难阅读,但这就是我。