检查null布尔值是否为true会导致exception
我有以下代码:
Boolean bool = null; try { if (bool) { //DoSomething } } catch (Exception e) { System.out.println(e.getMessage()); } 为什么我检查布尔variables“bool”会导致exception? 当它“看到”它不是真实的时候,它不应该跳过if语句吗? 当我删除if语句或检查它是否为空,exception消失。
 当你有一个boolean它可以是true或false 。 然而,当你有一个Boolean它可以是Boolean.TRUE , Boolean.FALSE或null作为任何其他对象。 
 在你的具体情况,你的Boolean值为null , if语句触发一个隐式转换为boolean ,产生NullPointerException 。 您可能需要改为: 
 if(bool != null && bool) { ... } 
如果你不喜欢额外的空检查:
 if (Boolean.TRUE.equals(value)) {...} 
使用Apache的BooleanUtils 。
不要重新发明轮子。
如果峰值性能是您项目中最重要的优先事项,那么请查看本地解决scheme的其他答案之一,该解决scheme不需要包含外部库。
 否则,利用已经构build的内容并使用isTrue() : 
 BooleanUtils.isTrue( bool ); 
 检查Boolean值是否为真,通过返回false处理null 。 
  如果您不限于“允许”包含的库,那么对于各种用例(包括Booleans和Strings都有一大帮助函数。  我build议你仔细阅读各种Apache库,看看他们已经提供了什么。 
  Booleantypes可以为null 。 您需要执行null检查,因为您已将其设置为null 。 
 if (bool != null && bool) { //DoSomething } 
Boolean是原始布尔值的对象包装类。 这个类作为任何类,确实可以是null。 出于性能和内存的原因,总是最好使用原语。
Java API中的包装类有两个主要用途:
- 提供一种机制来“包装”对象中的原始值,使得原语可以包含在为对象保留的活动中,比如添加到集合中,或者从具有对象返回值的方法返回。
- 为基元提供各种实用function。 这些函数中的大多数都与各种转换有关:将字符转换为string对象或将字符转换为字符,将字符和字符对象转换为不同的基(或基),如二进制,八进制和hex。
因为你的variablesbool指向一个null,你将总是得到一个NullPointerException,你需要首先在一个非空值的地方初始化variables,然后修改它。