必须如何初始化布尔实例?
是吗
Boolean b = null;
或者
Boolean b = new Boolean(null);
哪一个是正确的编码实践?
如果你想要一个,第一个是正确的null
Boolean
。
就我个人而言,我不喜欢有null
值,更喜欢使用boolean
,默认情况下它不能null
并且是false
。
为了理解第二个语句是什么,您需要了解 Java 原始包装器。ABoolean
只是围绕 a 的对象包装器boolean
;当您直接声明时:
Boolean b = false;
有一些自动装箱正在进行,这基本上相当于写作
Boolean b = Boolean.FALSE;
如果您声明 a ,new Boolean
那么您将创建一个新的独立Boolean
对象,而不是允许编译器(可能)重用现有引用。
使用原始包装类型的构造函数很少(如果有的话)有意义。
绝对不需要为布尔值创建新对象。这就是javadoc所说的
注意:很少使用这个构造函数。除非需要新实例,否则静态工厂 valueOf(boolean) 通常是更好的选择。它可能会产生明显更好的空间和时间性能。
○<code>Boolean b = new Boolean(null); 使用Boolean(String)
ctor 并将b
内部布尔值设置false
为与将b
引用设置为 null 不同。
Boolean b = null;
System.out(b.boolValue()); throws a NullPointerException
但
Boolean b = new Boolean(null);
System.out(b.boolValue()); will print `false`
如果您只需要两种状态值(布尔值),请使用原始布尔值;如果您需要一个三态对象 ( null, true, false
),请使用Boolean
对象并设置对象引用(如第一个示例所示)为null
两者都是正确的声明
Boolean b = null;
这是不断创建的,它将进入恒定池内存。您需要使用==
运算符来比较两个布尔常量。
Boolean b = new Boolean(null);
这是对象创建,它将进入堆内存。您需要使用.equals()
方法来比较两个布尔对象。