java自动装箱与拆箱及其陷阱分析[权威资料]

java自动装箱与拆箱及其陷阱分析[权威资料]

ID:14656058

大小:26.50 KB

页数:14页

时间:2018-07-29

java自动装箱与拆箱及其陷阱分析[权威资料]_第1页
java自动装箱与拆箱及其陷阱分析[权威资料]_第2页
java自动装箱与拆箱及其陷阱分析[权威资料]_第3页
java自动装箱与拆箱及其陷阱分析[权威资料]_第4页
java自动装箱与拆箱及其陷阱分析[权威资料]_第5页
资源描述:

《java自动装箱与拆箱及其陷阱分析[权威资料]》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java自动装箱与拆箱及其陷阱分析本文档格式为WORD,感谢你的阅读。最新最全的学术论文期刊文献年终总结年终报告工作总结个人总结述职报告实习报告单位总结演讲稿Java自动装箱与拆箱及其陷阱分析  Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,本文是搜索整理的关于Java自动装箱与拆箱及其陷阱分析,给大家做个参考,希望对大家有所帮助!想了解更多相关信息请持续关注我们!  自动装箱(Autoboxing)  大家在平时编写Java程序时,都常常以以下方式来定义一个Integer对象:  Integeri=100;  从上面的代码中,大家可以

2、得知,i为一个Integer类型的引用,100为Java中的基础数据类型(primitivedatatype)。而这种直接将一个基础数据类型传给其相应的封装类(wrapperclass)的做法,便是自动装箱(Autoboxing)。  在jdk1.5中,自动装箱首次被引入。而在jdk1.5之前,如果你想要定义一个value为100的Integer对象,则需要这样做:  Integeri=newInteger(100);  我们在以上代码“Integeri=100;”处打一个断点,跟踪一下。  接下来,我们可以看到,程序跳转到了Integer类的val

3、ueOf(inti)方法中  /**  *Returnsainstancerepresentingthespecified  *value.  *Ifanewinstanceisnotrequired,thismethod  *shouldgenerallybeusedinpreferencetotheconstructor  *{@link#Integer(int)},asthismethodislikelytoyield  *significantlybetterspaceandtimeperformancebycaching  *frequen

4、tlyrequestedvalues.  *@paramianvalue.  *@returna.  *@since1.5  publicstaticIntegervalueOf(inti){  if(i>=-128i<=IntegerCache.high)  returnIntegerCache.cache[i+128];  else  returnnewInteger(i);  换句话说,装箱就是jdk自己帮你完成了调用Integer.valueOf(100)。  拆箱(Unboxing)  Integerinteger100=100;  int

5、int100=integer100;  从上面的代码中,大家可看出integer100为一个Integer类型的引用,int100为一个int类型的原始数据类型。但是,我们可以将一个Integer类型的对象赋值给其相应原始数据类型的变量。这便是拆箱。  拆箱与装箱是相反的操作。装箱是将一个原始数据类型赋值给相应封装类的变量。而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。装箱、拆箱的名字也取得相当贴切。  笔者相信大家也都猜到了,拆箱过程中jdk为我们做了什么。我们还是通过实验来证明我们的猜想吧。  在以上代码的第二行代码打上断点,即在“i

6、ntint100=integer100;”上打上断点,跟踪一下。  我们可以看到,程序跳转到了Integer的intValue()方法。  /**  *Returnsthevalueofthisasan  *.  publicintintValue(){  returnvalue;  也就是,jdk帮我们完成了对intValue()方法的调用。对于以上的实验而言,便是调用integer100的intValue()方法,将其返回值赋给了int100。  扩展  实验1  Integerinteger400=400;  intint400=400;  S

7、ystem.out.println(integer400==int400);  在以上代码的第三行中,integer400与int400执行了==运行。而这两个是不同类型的变量,到底是integer400拆箱了,还是int400装箱了呢?运行结果是什么呢?  ==运算是判断两个对象的地址是否相等或者判断两个基础数据类型的值是否相等。所以,大家很容易推测到,如果integer400拆箱了,则说明对比的是两个基础类型的值,那此时必然相等,运行结果为true;如果int400装箱了,则说明对比的是两个对象的地址是否相等,那此时地址必然不相等,运行结果为fa

8、lse。(至于为什么笔者对它们赋值为400,就是后面将要讲到的陷阱有关)。  我们实际的运行结果为true。

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

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

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