首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中有什么理由使用"Boolean.TRUE.equals(x)“吗?

在Java中有什么理由使用"Boolean.TRUE.equals(x)“吗?
EN

Stack Overflow用户
提问于 2012-10-08 03:52:31
回答 5查看 27.5K关注 0票数 31

我在我正在做的一个项目中遇到了这个代码

(这是用Java编写的)

代码语言:javascript
运行
复制
if (Boolean.TRUE.equals(foo.isBar()))

Foo#isBar()定义为boolean isBar(),因此不能返回null

真的有什么理由要这样写吗?我自己就会写

代码语言:javascript
运行
复制
if (foo.isBar())

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

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-08 04:10:14

因为isBar返回一个基本的boolean,所以没有语义上的区别。另外,第二种方法更简洁、更清晰、更高效,因为结果不必为调用自动装箱,然后再提取原始布尔值。在所有这些情况下,没有理由使用第一个方法,也没有一些使用第二个方法的理由,所以请使用第二个方法。我给其他程序员很大的空间,但是我会坐下来和那些在专业代码中添加类似内容的人聊天。

票数 23
EN

Stack Overflow用户

发布于 2012-10-08 04:01:40

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

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

票数 37
EN

Stack Overflow用户

发布于 2012-10-08 03:58:23

我怀疑“旧的遗留代码没有很好的理由”--事实上,我认为它更糟糕。(我想知道如何比较ints .)

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

我知道的唯一原因是,如果foo.isBar被键入为返回Boolean (而不是boolean),那么它可能返回null

代码语言:javascript
运行
复制
Boolean b = null;

// throws an exception when it tries to unbox b because it is null
boolean isTrue1 = (boolean)b;

// evaluates to false
boolean isTrue2 = Boolean.TRUE.equals(b);

// evaluates to false as well
boolean isTrue3 = b != null ? (boolean)b : false;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12775082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档