Java中的“Boolean.TRUE.equals(x)”有什么理由吗?

时间:2012-10-08 03:52:32

标签: java boolean-expression

我在我正在处理的其中一个项目中遇到过这段代码

(这是Java)

if (Boolean.TRUE.equals(foo.isBar()))

Foo#isBar()定义为boolean isBar(),因此无法返回null

有没有理由为什么要这样写呢? 我自己就会写

if (foo.isBar())

,但也许我错过了一些微妙的东西。

由于

5 个答案:

答案 0 :(得分:17)

我希望foo.isBar()返回一个布尔值。在这种情况下,您始终可以写if (foo.isBar())。如果foo.isBar()返回Boolean,则可以是Boolean.TRUEBoolean.FALSENULL。在这种情况下,if (Boolean.TRUE.equals(foo.isBar()))确保if块在一个场景中执行(TRUE),在剩余的2中省略。

if (foo.isBar()) 将失败, foo.isBar() 返回布尔值NULL。

答案 1 :(得分:13)

由于isBar返回原语boolean,因此没有语义差异。此外,第二种方式更简洁,更清晰,更有效,因为结果不必为调用自动装箱,然后再次提取原始布尔值。鉴于这一切,没有理由使用第一种方法,而有几种方法使用第二种方法,所以使用第二种方法。我给其他编码人员留下了很大的余地,但我会坐下来与任何向专业代码添加类似内容的人聊聊。

答案 2 :(得分:2)

我怀疑“旧遗留代码没有充分理由” - 事实上,我认为它是更糟。 (我想知道如何比较int ..)

使用TRUE.equals的代码需要一个拳击转换,一个额外的方法调用(以及里面的所有内容),最后,它看起来很草率


我所知道的唯一原因是foo.isBar 类型为返回Boolean(不是boolean)以及它可能返回{{1}的位置}:

null

答案 3 :(得分:1)

有些人认为(我自己不是其中之一)过于明确会使布尔条件更具可读性。例如,使用

if(foo == true)代替if(foo)

也许这是一个类似的案例?

答案 4 :(得分:-3)

在第一个条件中,您正在检查对应于true的Boolean对象是否相等。 并且您正在使用代码中的第一个条件,因为您的Java版本不支持自动装箱,因此您需要使用布尔对象。

What is the difference between Boolean.TRUE and true in Java?