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

riy*_*ana 22 java

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

if(dataVal)
    System.out.println("\n\NULL value in dataVal: "+dataVal);
else
    System.out.println("\n\nvalue in dataVal: "+dataVal);
Run Code Online (Sandbox Code Playgroud)

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

hel*_*ios 34

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

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


Ale*_*lex 14

因为dataVal被转换为boolean使用Boolean.booleanValue()哪个被转换为null.booleanValue()导致您进入NullPointerException.


Jer*_*ome 5

你可以看看规范拆箱的问题,你的情况描述这里部分5.1.8拆箱转换:如果r为空,拆箱转换抛出一个NullPointerException

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

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

final Boolean booleanTest = new Boolean (true);
if (booleanTest) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)