检查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库,看看他们已经提供了什么。
Boolean
types可以为null
。 您需要执行null
检查,因为您已将其设置为null
。
if (bool != null && bool) { //DoSomething }
Boolean是原始布尔值的对象包装类。 这个类作为任何类,确实可以是null。 出于性能和内存的原因,总是最好使用原语。
Java API中的包装类有两个主要用途:
- 提供一种机制来“包装”对象中的原始值,使得原语可以包含在为对象保留的活动中,比如添加到集合中,或者从具有对象返回值的方法返回。
- 为基元提供各种实用function。 这些函数中的大多数都与各种转换有关:将字符转换为string对象或将字符转换为字符,将字符和字符对象转换为不同的基(或基),如二进制,八进制和hex。
因为你的variablesbool指向一个null,你将总是得到一个NullPointerException,你需要首先在一个非空值的地方初始化variables,然后修改它。