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

Posted red-vel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为何将未被初始化的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是合法的,所以能够执行成功。


以上是关于为何将未被初始化的Integer变量赋值给int变量时会抛出空指针异常?的主要内容,如果未能解决你的问题,请参考以下文章

Integer对象能直接赋值给int吗?

请问java中怎样将Integer类型的对象赋值给int

指针定义NULL后无法赋值?

C++中为何不能对共用体变量名赋值?

C语言同类型指针赋值简单问题

C语言指针变量的赋值和做函数的参数