2

必须如何初始化布尔实例?

是吗

Boolean b = null;

或者

Boolean b = new Boolean(null);

哪一个是正确的编码实践?

4

4 回答 4

4

如果你想要一个,第一个是正确的null Boolean

就我个人而言,我不喜欢有null值,更喜欢使用boolean,默认情况下它不能null并且是false

为了理解第二个语句是什么,您需要了解 Java 原始包装器。ABoolean只是围绕 a 的对象包装器boolean;当您直接声明时:

Boolean b = false;

有一些自动装箱正在进行,这基本上相当于写作

Boolean b = Boolean.FALSE;

如果您声明 a ,new Boolean那么您将创建一个新的独立Boolean对象,而不是允许编译器(可能)重用现有引用。

使用原始包装类型的构造函数很少(如果有的话)有意义。

于 2013-10-31T08:17:27.180 回答
1

绝对不需要为布尔值创建新对象。这就是javadoc所说的

注意:很少使用这个构造函数。除非需要新实例,否则静态工厂 valueOf(boolean) 通常是更好的选择。它可能会产生明显更好的空间和时间性能。

于 2013-10-31T08:17:17.993 回答
1

○<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

于 2013-10-31T08:18:12.723 回答
0

两者都是正确的声明

Boolean b = null; 

这是不断创建的,它将进入恒定池内存。您需要使用==运算符来比较两个布尔常量。

Boolean b = new Boolean(null); 

这是对象创建,它将进入堆内存。您需要使用.equals()方法来比较两个布尔对象。

于 2013-10-31T08:19:40.463 回答