【发布时间】:2012-06-15 20:16:06
【问题描述】:
我有以下代码:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
为什么我对布尔变量“bool”的检查会导致异常? 当它“看到”它不是真的时,它不应该直接跳过 if 语句吗? 当我删除 if 语句或检查它是否为空时,异常消失。
【问题讨论】:
-
以上关于对象拆箱的答案都是正确的。但是,为了完整起见,您也可以更改代码以使用原始“布尔”而不是对象包装器“布尔”。您还应该重新了解基元和对象之间的区别。
-
同时...
if (bool == Boolean.TRUE)评估为 false 而不产生异常。不确定在我刚刚发现的情况下这是否是故意的。 -
@simon.watts 如果
bool是null或Boolean是显式构造的(而不是作为对Boolean.TRUE的引用),这将是错误的。所以不推荐;与if (Boolean.TRUE.equals(bool))不同,后者将按预期工作,包括安全处理null值。
标签: java