广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 惠州计算机学校 > 正文

​Java面试题:装箱与拆箱_惠州计算机Java培训

作者:邓华发布时间:2021-03-16分类:惠州计算机学校浏览:753


导读:快到毕业季了,惠州北大青鸟新方舟校区很多学员正准备投简历面试企业,下面惠州北大青鸟就业部老师给大家分享​Java面试题:装箱与拆箱,希望能帮到大家。

快到毕业季了,惠州北大青鸟新方舟校区很多学员正准备投简历面试企业,下面惠州北大青鸟就业部老师给大家分享Java面试题:装箱与拆箱,希望能帮到大家。

什么是装箱?什么是拆箱?

Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:

Integer i = new Integer(10);

而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:

Integer i = 10;

这个过程中会自动根据数值创建对应的Integer对象,这就是装箱。

那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:

Integer i = 10; //装箱

int n = i; //拆箱

简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。

下表是基本数据类型对应的包装器类型:

装箱和拆箱是如何实现?

如下代码理解一下:

public class Main {

public static void main(String[] args) {

Integer total = 99; //自动装箱

int totalprim = total; //自定拆箱

}

}

反编译class文件之后得到如下内容:

Integer total=99;执行上面那句代码的时候,系统为我们执行了:Integer total=Integer、valueOf(99);

int totalprim=total;执行上面那句代码的时候,系统为我们执行了:int totalprim=total、intValue();

也就是在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。

其他的也类似,比如Double、Character。

因此可以用一句话总结装箱和拆箱的实现过程:

装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。

Java 语句 Integer i = 1; i += 1; 做了哪些事情?

首先Integer i=1;做了自动装箱(使用valueOf()方法将int装箱为Integer类型),接着i+=1;先将Integer类型的i自动拆箱成int(使用intValue()方法将Integer拆箱为int),完成加法运行之后的i再装箱成Integer类型。

下面程序的运行结果是什么?

答:答案如上注释所述,通过查看Integer的源码可以发现,针对-128到127之间的数据做了一个数据缓冲池,如果数据是该范围内的,每次并不创建新的对象,所以就有了上面的结果。

下面语句能正常执行吗?

Integer test1 = (Integer) null;

Double test2 = (Double) null;Boolean test3 = (Boolean) null;

答:上面语句可以正常执行。因为在 Java 中 null 既不是对象也不是一种类型,它仅是一种特殊的值,我们可以将其赋予任何引用类型,也可以将 ull 转化成任何类型。

下面这段代码的输出结果是什么?

public class Main {

public static void main(String[] args) {

Double i1 = 100、0;

Double i2 = 100、0;

Double i3 = 200、0;

Double i4 = 200、0;

System、out、println(i1==i2);

System、out、println(i3==i4);

}

}

实际输出结果为:

false

false

具体为什么,大家可以去查看Double类的valueOf的实现。

在这里只解释一下为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。很简单:在某个范围内的整型数值的个数是有限的,而浮点数却不是。

注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。

Double、Float的valueOf方法的实现是类似的。

更多Java资讯关注网站动态,或者来惠州北大青鸟新方舟校区了解一下。

Java17.jpg

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


惠州计算机学校排行
标签列表
网站分类
文章归档
最近发表