Boolean.FALSE or new Boolean(false)?



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

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

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

现在我想知道下面两个语句是否真的等价。

Boolean myBool = new Boolean(false);

Boolean myBool = Boolean.FALSE;

我假设在第一种情况下,构造了一个新的布尔对象,myBool引用指向它,而在第二种情况下,我们实际上复制了对布尔对象的引用。FALSE对象-这是正确的吗?

如果是这样,那么这个差别到底是什么意思呢?

最后但并非最不重要的实际的问题:我应该更喜欢这两个选项中的哪一个,为什么?

差异:

Boolean.FALSE == Boolean.FALSE

(布尔)真正的

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

(布尔)假


使用

Boolean myBool = false;

让自动装箱处理

应该使用布尔值。FALSE而不是在堆上创建一个新对象,因为这是不必要的。我们应该在内存中使用这个静态final对象,这样访问它会更快。

是的,你是正确的:

第一种情况是构造一个新的布尔对象,myBool参考点指向它

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

当我们有布尔值时,你的另一个问题。为什么我们有选项new Boolean(FALSE)原因是它是一个构造函数。假设你有一个原始布尔变量x,你不知道它的值是真还是假,你想要一个相应的布尔对象,那么这个构造函数将被用来传递原始布尔变量x来获得布尔对象。

最新更新