JAVA中的Boolean对象和布尔变量问题

我声明了一个布尔变量。 例如, Boolean dataVal=null;
现在,如果我执行以下代码段:

 if(dataVal) System.out.println("\n\NULL value in dataVal: "+dataVal); else System.out.println("\n\nvalue in dataVal: "+dataVal); 

我得到NullPointerException 。 嗯,我知道它很明显,但我需要知道这背后的原因。

当您评估Boolean对象Java的布尔值时,取消该值(自动装箱function,自1.5起)。 所以真正的代码是: dataVal.booleanValue() 。 然后它抛出NullPointerException 。 对于任何装箱值,取消装箱空对象会引发此exception。

在1.5之前你必须手动取消装箱值: if (dataVal.booleanValue())所以它更明显(更详细:)

因为使用Boolean.booleanValue()null.booleanValue()转换为boolean并将其转换为null.booleanValue() ,这会导致您出现NullPointerException。

您可以查看拆箱问题的规范,您的情况在此处描述5.1.8拆箱转换如果r为null,则拆箱转换会抛出NullPointerException

这意味着你的if(/ * Boolean对象* /)永远不会被拆箱成布尔基元类型,因此抛出一个NPE因为你做了一个无效的if(null)

顺便说一下,如果您有以下情况,拆箱将起作用:

 final Boolean booleanTest = new Boolean (true); if (booleanTest) { // Do something } 

Boolean(class)!= boolean(primitive type)。

Java尝试获取调用dataVal.booleanValue()的原始值。 因为dataVal为null,所以会得到空指针exception。

if(null)不是有效表达式,就像那样简单。

在引擎盖下,VM正在使用自动装箱……所以你得到一个NullPointerException.

当您尝试评估布尔对象值时,jvm在内部调用该对象上的booleanValue(),因为您为该对象指定了null,它将抛出NullPointerException