2015-10-08 36 views
8

我在布尔类的源看到以下内容:Boolean.FALSE或new Boolean(false)?

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

因此,如果我理解正确的领域FALSEBoolean类是Boolean本身已其boolean字段设置为false

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

Boolean myBool = new Boolean(false); 

Boolean myBool = Boolean.FALSE; 

我会假设,在一个新的Boolean对象的构造与第一种情况和myBool参考点到它,而在第二种情况下,我们实际上做参考的副本到Boolean.FALSE对象 - 这是正确的吗?

如果是这样的话有什么区别真的是什么意思?

最后但并非最不重要的实际问题:我更喜欢哪两种选择,为什么?

+1

你应该使用'Boolean.FALSE'。这符合JDK可能具有的未来更新。 –

+1

而且'Boolean.valueOf()'通常更适合'new Boolean()'。 – Keppil

+3

都不是。使用'false'让编译器通过自动装箱将其排除。 – EJP

回答

1

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

是的,你是正确的:一个新的Boolean对象的构造

第一种情况和myBool 参考点,以它

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

而你的另一个问题,而我们有布尔。假我们为什么有新布尔(假)的原因是它是一个构造函数。假设你有一个原始的布尔变量x,并且你不知道它的值是真是假,并且你想要一个相应的布尔对象,比这个构造函数将被用来传递该原始布尔变量x来获得布尔对象。

+1

在这种情况下,不会出现Keppil的评论,而应该使用Boolean.valueOf()? – dingalapadum

+1

是的,最好在构造函数上使用Boolean.valueOf()。 – proudandhonour

+0

@Keppil ok。然后作为后续:我不明白为什么会想要一个新的布尔对象,而不是总是让它指向Boolean.FALSE(Boolean.TRUE)。从我看到'valueOf'实际上也是这样。那么有没有*任何用例,其中一个真的会创建一个新的布尔对象? – dingalapadum

3

的区别:

Boolean.FALSE == Boolean.FALSE 

(布尔)真

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

(布尔)假


使用

Boolean myBool = false; 

并让自动装箱处理它。

相关问题