【发布时间】:2012-06-26 11:19:05
【问题描述】:
Java boolean 允许 true 和 false 的值,而布尔值允许 true、false 和 null。我已经开始将我的booleans 转换为Booleans。这可能会导致测试崩溃,例如
Boolean set = null;
...
if (set) ...
测试时
if (set != null && set) ...
似乎做作并且容易出错。
如果有的话,什么时候使用带有空值的Booleans 有用吗?如果从来没有,那么包裹对象的主要优点是什么?
更新: 有很多有价值的答案,我在自己的答案中总结了一些。我充其量只是 Java 的中级,所以我试图展示我认为有用的东西。请注意,问题是“措辞不正确”(布尔值不能“具有空值”),但我已将其保留以防其他人有同样的误解
【问题讨论】:
-
有时,您想要一个未初始化的状态,将
Boolean变量设置为null会有所帮助。 -
“Always”有点强,我不敢确认,但如果它真的被用作第三种状态,我希望对
null进行测试。 -
你有理由将布尔值转换为布尔值吗?我会坚持使用原始类型并仅在有充分理由这样做的情况下包装它,例如当我需要通过引用传递变量时。
-
没有“空值 in 布尔值”这样的东西。
Boolean是一个对象,而boolean是一个“标量”。如果Boolean引用设置为 null,则表示相应的Boolean对象不存在。你不能把任何东西放在不存在的东西里面。