为什么在将值为null的Integer变量赋值给int变量后得到NPE?

时间:2014-04-01 16:12:07

标签: java

我想知道编译器如何读取此代码。

public class obj {
    public static void main(String[] args) {
        Integer obj = null; //line4
        int x = obj;   //line 5
        System.out.println(x); //line6  
    }
}

我的理解是第5行可以自动取消装箱,这意味着它会将Integer类型转换为原始int

但我没有在x上调用任何方法,只是打印。为什么给我一个NullPointerException

3 个答案:

答案 0 :(得分:3)

这里的Autoboxing意味着

int x = obj; 

实际上是:

int x = obj.intValue();

因此是NullPointerException,因为obj为null。

答案 1 :(得分:0)

Java有一个名为 autoboxing 的东西,其中Integer对象自动转换为int主要。

答案 2 :(得分:0)

查看字节码

javap -c com.interviews.practise.obj