在自动装箱中,转换是基于我们分配给的变量/引用还是反过来?

Nit*_*ess 1 java autoboxing

public class TestBox {
    Integer i;
    int j;

    public static void main (String[] args) {
        TestBox t = new TestBox();
        t.go();
    }

    public void go() {
        j = i;
        System.out.println(j);
        System.out.println(i);
    }
}  
Run Code Online (Sandbox Code Playgroud)

我在线上得到一个空指针异常j=i.
虽然如果这条线被转换为i=j我得到输出,因为0 0它是int的默认值.
我的问题是,什么时候i被分配j,不应该i取消装箱作为一个int变量,并取默认值0而不是其原来的默认空值?

Ale*_*yak 5

编译器会转换此分配

j = i;
Run Code Online (Sandbox Code Playgroud)

......进入这个:

j = i.intValue( );
Run Code Online (Sandbox Code Playgroud)

如果i为null,则获得NPE.