问题
我有以下代码:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
为什么我检查布尔变量"bool"会导致异常?当它"看到"它不是真的时,它是否应该直接跳过if语句?当我删除if语句或检查它是否为null时,异常消失。
#1 热门回答(271 赞)
如果你不喜欢额外的空检查:
if (Boolean.TRUE.equals(value)) {...}
#2 热门回答(116 赞)
当你有aboolean
it时可以是true
或false
。然而,当你有aBoolean
it可以是Boolean.TRUE
,Boolean.FALSE
或null
任何其他对象。
在你的特定情况下,你的Boolean
isnull
和if
语句会触发隐式转换为3886000168,从而生成NullPointerException
。你可能需要:
if(bool != null && bool) { ... }
#3 热门回答(49 赞)
使用Apache BooleanUtils。(如果峰值性能是项目中最重要的优先级,那么请查看不需要包含外部库的本机解决方案的其他答案之一。)
不要重新发明轮子。利用已经构建的内容并使用isTrue()
:
BooleanUtils.isTrue( bool );
检查aBoolean
value是否为真,处理null
,返回false
。
如果你不限于你被"允许"包含的库,那么各种用例都有很多很棒的帮助函数,包括Booleans
和Strings
。我建议你仔细阅读各种Apache库,看看它们已经提供了什么。