我声明了一个布尔变量.例如,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.
你可以看看规范拆箱的问题,你的情况描述这里部分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)
| 归档时间: |
|
| 查看次数: |
20706 次 |
| 最近记录: |