我有以下代码:

Boolean bool = null;

try 
{
    if (bool)
    {
        //DoSomething
    }                   
} 
catch (Exception e) 
{
    System.out.println(e.getMessage());             
}

为什么我对布尔变量“bool”的检查导致异常? 当它“看到”它不是真的时,它不应该直接跳过if语句吗? 当我删除if语句或检查它是否为非空时,异常消失了。


当前回答

使用Apache BooleanUtils。

(如果最佳性能是项目中最重要的优先级,那么请查看不需要包含外部库的本地解决方案的其他答案。)

不要白费力气。利用已经构建的内容并使用isTrue():

BooleanUtils.isTrue( bool );

检查布尔值是否为true,通过返回false处理null。

如果您不局限于“允许”包含的库,那么对于各种用例(包括布尔值和字符串值),有很多很棒的帮助函数。我建议您仔细阅读各种Apache库,看看它们已经提供了什么。

其他回答

当你的变量bool指向null时,你总是会得到一个NullPointerException,你需要先在某个地方初始化一个非null值的变量,然后修改它。

或者借助Java 8 Optional的强大功能,你也可以做到这样的技巧:

Optional.ofNullable(boolValue).orElse(false)

:)

使用Apache BooleanUtils。

(如果最佳性能是项目中最重要的优先级,那么请查看不需要包含外部库的本地解决方案的其他答案。)

不要白费力气。利用已经构建的内容并使用isTrue():

BooleanUtils.isTrue( bool );

检查布尔值是否为true,通过返回false处理null。

如果您不局限于“允许”包含的库,那么对于各种用例(包括布尔值和字符串值),有很多很棒的帮助函数。我建议您仔细阅读各种Apache库,看看它们已经提供了什么。

布尔类型可以为空。你需要做一个空检查,因为你已经把它设置为空。

if (bool != null && bool)
{
  //DoSomething
}                   

当你有一个布尔值时,它可以是真也可以是假。当你有一个布尔值时,它可以是布尔值。真的,布尔。FALSE或null作为任何其他对象。

在您的特定情况下,您的布尔值为null, if语句触发到布尔值的隐式转换,从而产生NullPointerException。你可能需要:

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