我在布尔类的源代码中看到了以下内容:
public static final Boolean FALSE = new Boolean(false);
因此,如果我理解正确,FALSE
类中的字段Boolean
是Boolean
本身,其boolean
字段设置为false
。< / p>
现在我想知道以下两个陈述是否真的相同。
Boolean myBool = new Boolean(false);
和
Boolean myBool = Boolean.FALSE;
我认为在第一种情况下构造一个新的Boolean对象并且myBool引用指向它,而在第二种情况下,我们实际上复制了对Boolean.FALSE对象的引用 - 这是正确的吗? / p>
如果是这样,这种差异真的是什么意思?
最后但并非最不重要的实际问题:我应该选择哪两个选项以及为什么?
答案 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>