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方法的实现是类似的。
免责声明:内容来源于公开网络,若涉及侵权联系尽快删除!
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
相关推荐
更多2016-06-07
2016-06-15
2022-05-31
达内就业喜报
更多>Java开班时间
-
北京 丨 12月25日
火速抢座 -
上海 丨 12月25日
火速抢座 -
广州 丨 12月25日
火速抢座 -
兰州 丨 12月25日
火速抢座 -
杭州 丨 12月25日
火速抢座 -
南京 丨 12月25日
火速抢座 -
沈阳 丨 12月25日
火速抢座 -
大连 丨 12月25日
火速抢座 -
长春 丨 12月25日
火速抢座 -
哈尔滨 丨 12月25日
火速抢座 -
济南 丨 12月25日
火速抢座 -
青岛 丨 12月25日
火速抢座 -
烟台 丨 12月25日
火速抢座 -
西安 丨 12月25日
火速抢座 -
天津 丨 12月25日
火速抢座 -
石家庄 丨 12月25日
火速抢座 -
保定 丨 12月25日
火速抢座 -
郑州 丨 12月25日
火速抢座 -
合肥 丨 12月25日
火速抢座 -
太原 丨 12月25日
火速抢座 -
苏州 丨 12月25日
火速抢座 -
武汉 丨 12月25日
火速抢座 -
成都 丨 12月25日
火速抢座 -
重庆 丨 12月25日
火速抢座 -
厦门 丨 12月25日
火速抢座 -
福州 丨 12月25日
火速抢座 -
珠海 丨 12月25日
火速抢座 -
南宁 丨 12月25日
火速抢座 -
东莞 丨 12月25日
火速抢座 -
贵阳 丨 12月25日
火速抢座 -
昆明 丨 12月25日
火速抢座 -
洛阳 丨 12月25日
火速抢座 -
临沂 丨 12月25日
火速抢座 -
潍坊 丨 12月25日
火速抢座 -
运城 丨 12月25日
火速抢座 -
呼和浩特丨12月25日
火速抢座 -
长沙 丨 12月25日
火速抢座 -
南昌 丨 12月25日
火速抢座 -
宁波 丨 12月25日
火速抢座 -
深圳 丨 12月25日
火速抢座 -
大庆 丨 12月25日
火速抢座