我在布尔类的源代码中看到如下内容:
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来获得布尔对象。