深入剖析java中的装箱和拆箱

深入剖析java中的装箱和拆箱

ID:8833401

大小:74.61 KB

页数:9页

时间:2018-04-09

深入剖析java中的装箱和拆箱_第1页
深入剖析java中的装箱和拆箱_第2页
深入剖析java中的装箱和拆箱_第3页
深入剖析java中的装箱和拆箱_第4页
深入剖析java中的装箱和拆箱_第5页
资源描述:

《深入剖析java中的装箱和拆箱》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、深入剖析Java中的装箱和拆箱  自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:  一.什么是装箱?什么是拆箱?  二.装箱和拆箱是如何实现的  三.面试中相关的问题  若有不正之处,请谅解和批评指正,不胜感激。  请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com/dolphin0520/p/3780005.html一.什么是装箱?什么是拆箱? 

2、 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在JavaSE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:1Integeri= new Integer(10);  而在从JavaSE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:1Integeri= 10;  这个过程中会自动根据数值创建对应的Integer对象,这就是装箱。  那什么是拆箱呢?顾名思义,跟装箱对应

3、,就是自动将包装器类型转换为基本数据类型:12Integeri= 10;  //装箱int n=i;   //拆箱  简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。  下表是基本数据类型对应的包装器类型:int(4字节)Integerbyte(1字节)Byteshort(2字节)Shortlong(8字节)Longfloat(4字节)Floatdouble(8字节)Doublechar(2字节)Characterboolean(未定)Boolean二.装箱和拆箱是如何实现的  上一小节了解装箱

4、的基本概念之后,这一小节来了解一下装箱和拆箱是如何实现的。  我们就以Interger类为例,下面看一段代码:1234567public class Main{    public static void main(String[]args){                 Integeri= 10;        int n=i;    }}  反编译class文件之后得到如下内容:    从反编译得到的字节码内容可以看出,在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intVal

5、ue方法。  其他的也类似,比如Double、Character,不相信的朋友可以自己手动尝试一下。  因此可以用一句话总结装箱和拆箱的实现过程:  装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。三.面试中相关的问题  虽然大多数人对装箱和拆箱的概念都清楚,但是在面试和笔试中遇到了与装箱和拆箱的问题却不一定会答得上来。下面列举一些常见的与装箱/拆箱有关的面试题。1.下面这段代码的输出结果是什么?123public class Main{    public

6、 static void main(String[]args){         456789101112        Integeri1= 100;        Integeri2= 100;        Integeri3= 200;        Integeri4= 200;                 System.out.println(i1==i2);        System.out.println(i3==i4);    }}  也许有些朋友会说都会输出false,或者也有朋友会说都会输出true。但是事实上输出结果是:

7、truefalse   为什么会出现这样的结果?输出结果表明i1和i2指向的是同一个对象,而i3和i4指向的是不同的对象。此时只需一看源码便知究竟,下面这段代码是Integer的valueOf方法的具体实现:publicstaticIntegervalueOf(inti){if(i>=-128&&i<=IntegerCache.high)returnIntegerCache.cache[i+128];elsereturnnewInteger(i);}  而其中IntegerCache类的实现为:privatestaticclassIntegerCac

8、he{staticfinalinthigh;staticfinalIntegercache[];static

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。