深入剖析Java中的装箱和拆箱Java开发Java经验技巧.docVIP

深入剖析Java中的装箱和拆箱Java开发Java经验技巧.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深入剖析Java中的装箱和拆箱Java开发Java经验技巧.doc

深入剖析Java中的装箱和拆箱-编程开发技术 深入剖析Java中的装箱和拆箱 原文出处:海了 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就來一些看一 卜?装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基木的东西,再来看一下 而试笔试屮经常遇到的与装箱、拆箱相关的问题。 以下是木文的目录大纲: 一?什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三?而试小相关的问题 若冇不正Z处,请谅解和批评指正,不胜感激。 什么是装箱?什么是拆箱? 在前面的文章中提到,九腹为每种基本数据类型都提供了对应的包装器类型, 至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的刖 友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer 对象,必须这样进行: Integer i 二 new Integer (10); 而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的 Integer对象,只需要这样就可以了: Integer i = 10; 这个过程屮会自动根据数值创建对应的Integer对象,这就是装箱。 那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基木数 据类型: Integer i = 10; //装箱 int n = i; //拆箱 简单一点说,装箱就是?自动将基木数据类型转换为包装器类型;拆箱就是?自 动将包装器类型转换为基木数据类型。 下表是基本数据类型对应的包装器类型: int (4字节) Integer byte (1 字节) Byte short (2 字节) Short long (8 字节) Long | float (4 字节) Float double (8 字节) Double char (2 字节) Character boolean (未定) Boolean 装箱和拆箱是如何实现的 上一小节了解装箱的基本概念Z后,这一小节来了解一下装箱和拆箱是如何实现 的。 我们就以Tnterger类为例,下面看一段代码: public class Main { public static void main(String[] args) { Integer i = 10; int n 二 i; } 反编译class文件Z后得到如下内容: E:\Workspace\Test\bin\con\cxh\testljauap -c Main Compiled from MMain.jauaM public class con.cxh.testl.Main extends jaua.lang.Objec public con.cxh.testl.MainO; Code ■ ■ 0: aload_0 1: inuokespec ial tt8 ; //Method jaua/lang/Object. Minit M: OU 4: urn public static void nain jaua. lang.S] ; Code ■ ■ 0: bipush 10 2: inuokestatic ttl6 ; //Method jaua/lang/In: 1 Ljaua/lang/In teger; 5: astore_l 6 : aload_l 7: inuokeu irtual #22 ; //Method jaua/lang/Integ, intUalue : I 10: istore_2 11: urn 从反编译得到的字节码内容可以看岀,在装箱的时候自动调用的是Integer的 valueOf (int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。 其他的也类似,比如Doublcx Character,不相信的朋友可以门己手动尝试一下。 因此可以用一句话总结装箱和拆箱的实现过程: 装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装 器的xxxValue方法实现的。(xxx代表对应的基木数据类型)。 面试中相关的问题 虽然大多数人对装箱和拆箱的概念都清楚,但是在而试和笔试屮遇到了与装箱和 拆箱的问题却不一定会答得上来。下面列举一些常见的与装箱/拆箱有关的面试 题。 1.下面这段代码的输出结果是什么? public class Main { public static void main(String[] args) { Integer il 二 100; Integer i2 二 100; Integer i3 = 200; Integer i4 = 200; System, out. println(il==i2); System, out. println(i3二二i4); 也

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档