为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中与boolean常数进行显式比较是否不好(例如,如果(b == false))?

在Java中与boolean常数进行显式比较是否不好(例如,如果(b == false))?

慕码人8056858 2019-10-11 10:41:43
写不好吗:if (b == false) //...while (b != true) //...是不是总是更好,而不是写:if (!b) //...while (!b) //...大概在性能上没有区别(或存在什么区别?),但是您如何权衡两者之间的明确性,简洁性,清晰度,可读性等?更新资料为了限制主观性,我还要感谢权威编码风格指南中的所有引号,这些引号始终是更可取的或在何时使用。注意:变量名称b仅用作示例ala foo和bar。
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

不一定坏,只是多余的。同样,实际的变量名也很重要。例如if (userIsAllowedToLogin),我更希望以上if (b),甚至更差if (flag)。


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


更新:关于权威资料,我在《Sun Coding Conventions》中找不到明确的内容,但是至少Checkstyle有一个SimplifyBooleanExpression模块会对此发出警告。


查看完整回答
反对 回复 2019-10-11
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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


if ( b == true )

if ( b == false )

我个人觉得很难阅读,但是可以通过。但是,这种样式的一个大问题是,它导致您显示了令人难以置信的违反直觉的示例:


if ( b != true )

if ( b != false )

读者需要花费更多的精力来确定作者的意图。就我个人而言,我发现包括对true或false的显式比较是多余的,因此很难阅读,但这就是我。


查看完整回答
反对 回复 2019-10-11
?
ibeautiful

TA贡献1993条经验 获得超5个赞

这完全是一个品味问题。


我个人发现它的可读性比我if (!a) {低(编辑:对我来说),因此在以后维护代码时更容易出错,并且我已经转换为使用后一种形式。if (a == false) {


基本上,我不喜欢为逻辑运算而不是单词(C与Pascal)选择符号,因为对我 a = 10 and not b = 20而言a == 10 && !(b==20),它比容易阅读,但这就是Java中的用法。


任何赞成“ == false”方法的人都赞成“!” 显然,从来没有盯着代码太长时间,也没有错过那个感叹号。是的,您会遇到代码盲的情况。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 667 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信