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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Integer对象能直接赋值给int吗?相关的知识,希望对你有一定的参考价值。

能,这是java本身实现的,自动拆箱,装箱的过程也就是自动转换
就像String一样,把一个String
的对象和int变量相加,int变量会被字符串,
同样我认为在把Integer和int进行运算的时候,有一个从高到低自动转换的过程,
先把Integer转换成int
再进行的运算
参考技术A 理论上说是不合理的,一个是对象一个是基本类型
但1.5及其以后的版本有了自动拆箱和装箱
Integer
i
=
10;//装箱
int
i
=
new
Integer(10);//拆箱
这只是sun为了程序员的方便加入的,这样写能够通过编译
但只限于是1.5及其以后的版本
这要看JDK版本了
参考技术B integer
i
=
new
integer(10)
;
int
t
=
i
;
java
jdk1.5版本后又一新特性,就是自动打包和解包。所以integer类型可以直接赋值给int类型。

为何将未被初始化的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的区别 你会区别吗

笔记:String与new String(),Integernew Integer()int的区别

经典面试题:Integer类型 ==比较问题

int和Integer的区别

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

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