检查null Boolean是否为true导致异常

问题

我有以下代码:

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 赞)

当你有abooleanit时可以是truefalse。然而,当你有aBooleanit可以是Boolean.TRUE,Boolean.FALSEnull任何其他对象。

在你的特定情况下,你的Booleanisnullif语句会触发隐式转换为3886000168,从而生成NullPointerException。你可能需要:

if(bool != null && bool) { ... }

#3 热门回答(49 赞)

使用Apache BooleanUtils。(如果峰值性能是项目中最重要的优先级,那么请查看不需要包含外部库的本机解决方案的其他答案之一。)
不要重新发明轮子。利用已经构建的内容并使用isTrue()

BooleanUtils.isTrue( bool );

检查aBooleanvalue是否为真,处理null,返回false
如果你不限于你被"允许"包含的库,那么各种用例都有很多很棒的帮助函数,包括BooleansStrings。我建议你仔细阅读各种Apache库,看看它们已经提供了什么。