如何初始化布尔实例?
是吗
Boolean b = null;
或
Boolean b = new Boolean(null);
哪一个是正确的编码习惯?
答案 0 :(得分:3)
如果您需要null
Boolean
,第一个是正确的。
我个人不喜欢null
个值,而更喜欢使用boolean
,默认情况下不能null
且false
。
为了理解第二个语句你需要了解的关于Java原始包装器的内容。 Boolean
只是boolean
周围的对象包装器;当你直接申报时:
Boolean b = false;
正在进行一些自动装箱,这基本上等同于编写
Boolean b = Boolean.FALSE;
如果声明new Boolean
,则创建一个新的独立Boolean
对象,而不是允许编译器(可能)重用现有引用。
很少(如果有的话)使用原始包装类型的构造函数。
答案 1 :(得分:1)
绝对不需要为Boolean创建新对象。 这就是javadoc所说的
注意:使用此构造函数很少是合适的。除非需要新实例,否则静态工厂valueOf(boolean)通常是更好的选择。它可能会产生明显更好的空间和时间性能。
答案 2 :(得分:1)
○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
答案 3 :(得分:0)
两者都是正确的声明
Boolean b = null;
这是常量创建,它将转到常量池内存。您需要使用==
运算符来比较两个布尔常量。
Boolean b = new Boolean(null);
这是对象创建,它将转到堆内存。您需要使用.equals()
方法来比较两个布尔对象。