- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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);
也
您可能关注的文档
最近下载
- 中央空调净化系统标准规范操作规程.doc VIP
- 神志病中西医结合临床诊疗指南-精神分裂症.pdf VIP
- 混凝土重力坝施工课件.pptx VIP
- 辽宁省大连市2025届高三上学期双基测试数学试卷含答案.pdf VIP
- 2025-2026学年赣美版(2024)小学美术三年级上册《创意美术字》教学设计.docx
- 2.2 大气受热过程和大气运动(精品课件)-【居易课堂】2021-2022学年高一地理同步备课优质课件(人教2019必修第一册).pptx VIP
- 杜邦dupont芳纶凯夫拉kevlar应用领域.pdf VIP
- 细胞生物学(第五版)-第8章细胞骨架.ppt VIP
- InCAM Pro基础入门篇(中文).pdf VIP
- 2024届辽宁省大连市高三上学期期末双基测试化学试题及答案.pdf VIP
文档评论(0)