为何将未被初始化的Integer变量赋值给int变量时会抛出空指针异常?

Integer的NullPointerException

学习包装类的时候看到这样一个问题:

public class TestBox {

    Integer i;
    int j;

    public void go(){
        j = i;//第七行
        System.out.println(j);
        System.out.println(i);
    }
    
    public static void main(String[] args) {
        TestBox t = new TestBox();
        t.go();
    }
    
}

百度后,才知道将未初始化的Integer变量(即i)赋给int型变量j,由于未初始化的i的值为null,就会报错。
下图是输出未被初始化的i的截图:

将第七行的j = i;改为i=j;再运行,是成功的。

为什么呢?因为java编译器会给类中未被初始化的原始数据类型的实例变量赋一个默认值,但不会给引用数据类型赋默认值。
int类型的赋值为0,将0赋给一个Integer类型的变量i是合法的,所以能够执行成功。

原文地址:https://www.cnblogs.com/red-vel/p/12984355.html