din*_*dum 9 java boolean coding-style
我在布尔类的源代码中看到了以下内容:
public static final Boolean FALSE = new Boolean(false);
Run Code Online (Sandbox Code Playgroud)
因此,如果我理解正确的领域FALSE
在Boolean
类是Boolean
本身有其boolean
字段设置为false
.
现在我想知道以下两个陈述是否真的相同.
Boolean myBool = new Boolean(false);
Run Code Online (Sandbox Code Playgroud)
和
Boolean myBool = Boolean.FALSE;
Run Code Online (Sandbox Code Playgroud)
我假设在第一种情况下构造一个新的Boolean对象并且myBool引用指向它,而在第二种情况下,我们实际上复制了对Boolean.FALSE对象的引用 - 这是正确的吗?
如果是这样,这种差异究竟意味着什么?
最后但并非最不重要的实际问题:我应该选择哪两个选项以及为什么?
区别:
Boolean.FALSE == Boolean.FALSE
Run Code Online (Sandbox Code Playgroud)
(布尔值)真
new Boolean(false) == new Boolean(false)
Run Code Online (Sandbox Code Playgroud)
(布尔值)假
用
Boolean myBool = false;
Run Code Online (Sandbox Code Playgroud)
并让自动装箱处理它。
您应该使用 Boolean.FALSE 而不是在堆上创建新对象,因为这是不必要的。我们应该在内存中使用这个静态最终对象,甚至访问它会更快。
是的,你是对的:
第一种情况,构造一个新的布尔对象,并且 myBool 引用指向它
但在第二种情况下,我们只是指向现有的对象。
你的另一个问题是,当我们有 Boolean.FALSE 时,为什么我们可以选择new Boolean(false) , 原因是它是一个构造函数。假设你有一个原始布尔变量 x 并且你不知道它的值是 true 还是 false 并且你想要一个相应的布尔对象,那么这个构造函数将用于传递该原始布尔变量 x 以获得布尔对象。