更多课程 选择中心

Java培训
达内IT学院

400-111-8989

Java装箱与拆箱相关面试题

  • 发布:Java培训
  • 来源:企业面试题
  • 时间:2020-12-03 11:09

一、什么是装箱?什么是拆箱?

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方法的实现是类似的。

免责声明:内容来源于公开网络,若涉及侵权联系尽快删除!

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:2020年京东Java面试笔试题目小结
下一篇:2021年Java面试题整理汇总
Java装箱与拆箱相关面试题

Java装箱与拆箱相关面试题

2020年京东Java面试笔试题目小结

2020年京东Java面试笔试题目小结

Java面试过程中常出现的知识点

Java面试过程中常出现的知识点

两年Java程序员面试经验总结

两年Java程序员面试经验总结

  • 关注微信公众号

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 视频学习QQ群

    添加QQ群:1143617948

    免费领取达内课程视频学习资料

Copyright © 2018 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
贵州省

福建省

  • 达内厦门软件园中心
广西省

海南省