分配给原始int的Null Integer对象抛出NullPointerException

时间:2015-06-09 12:43:58

标签: java default-value

Integer i = null;
int j = i;
System.out.println(j);

为什么会抛出NullPointerException并且不会将j的值打印为0

3 个答案:

答案 0 :(得分:3)

Integer是一个对象。因此它是可以为空的。

Integer i = null;

是对的。

另一方面,

int是一个原始值,因此不可为空。

int j = i;

相当于

int j = null;

这是不正确的,并抛出NullPointerException

感谢JNYRanger:

从原始值对象包装器到其原始等价物的隐式转换称为“unboxing”,并且只要该对象保持非空值,就会起作用。

Integer i = 12;
int j = i;
System.out.println(j);

按预期输出12。

答案 1 :(得分:1)

之所以会这样,是因为当为int类型变量分配了Integer类型对象时,java编译器会尝试通过调用Integer引用上的intValue()方法来取消对象的值的装箱。在您的情况下,java编译器尝试通过调用i.intValue()来取消对对象i的装箱。

现在由于i为null,因此在null引用上调用任何方法都会导致NullPointerException,这就是您所遇到的情况。

答案 2 :(得分:0)

此操作失败,因为当您将i分配给j时,JVM会尝试取消隐藏int中包含的原始i值以将其分配给j 。由于i为null,因此失败并显示空指针异常。