Boolean.FALSE或new Boolean(false)?

时间:2015-10-08 11:31:06

标签: java coding-style boolean

我在布尔类的源代码中看到了以下内容:

public static final Boolean FALSE = new Boolean(false);

因此,如果我理解正确,FALSE类中的字段BooleanBoolean本身,其boolean字段设置为false。< / p>

现在我想知道以下两个陈述是否真的相同。

Boolean myBool = new Boolean(false);

Boolean myBool = Boolean.FALSE;

我认为在第一种情况下构造一个新的Boolean对象并且myBool引用指向它,而在第二种情况下,我们实际上复制了对Boolean.FALSE对象的引用 - 这是正确的吗? / p>

如果是这样,这种差异真的是什么意思?

最后但并非最不重要的实际问题:我应该选择哪两个选项以及为什么?

2 个答案:

答案 0 :(得分:4)

区别:

Boolean.FALSE == Boolean.FALSE

(布尔值)true

new Boolean(false) == new Boolean(false)

(布尔值)false

使用

Boolean myBool = false;

让autoboxing处理它。

答案 1 :(得分:2)

您应该使用Boolean.FALSE而不是在堆上创建新的Object,因为它是不必要的。我们应该将这个静态最终对象用作内存,甚至可以更快地访问它。

是的,你是对的:

  

第一种情况是构造一个新的Boolean对象和myBool   参考指向它

但在第二种情况下,我们只指向现有对象。

而你的另一个问题是我们有Boolean.FALSE为什么我们可以选择 new Boolean(false),原因是它是一个构造函数。假设你有一个原始的布尔变量x并且你不知道它的值是真是假你想要一个相应的布尔对象,那么这个构造函数将用于传递该原始布尔变量x以获得布尔对象。 p>