我有以下代码:

Boolean bool = null;

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

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


当前回答

如果你不喜欢额外的空检查:

if (Boolean.TRUE.equals(value)) {...}

其他回答

if (bool)将被编译为if (bool. booleanvalue()),也就是取消装箱,如果bool为null,将抛出NullPointerException。

可空框布尔值的其他解决方案:

JDK 9+ requireNonNullElse(obj, defaultObj) import static java.util.Objects.requireNonNullElse; if (requireNonNullElse(bool, false)) { / / DoSomething 谷歌番石榴18+ firstNonNull(第一,第二) import static com.google.common.base.MoreObjects.firstNonNull; if (firstNonNull(bool, false)) { / / DoSomething

此处使用False作为空大小写的默认值。

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

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

如果你不喜欢额外的空检查:

if (Boolean.TRUE.equals(value)) {...}

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

使用Apache BooleanUtils。

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

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

BooleanUtils.isTrue( bool );

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

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