电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Java自动装箱与拆箱及其陷阱分析

8页
  • 卖家[上传人]:桔****
  • 文档编号:483005169
  • 上传时间:2023-02-07
  • 文档格式:DOCX
  • 文档大小:23.57KB
  • / 8 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Java 自动装箱与拆箱及其陷阱分析定义 大家在平时编写 Java 程序时,都常常以以下方式来定义一个Integer 对象 :Integeri=100;从上面的代码中,大家可以得知, i 为一个 Integer 类型的引用, 100 为 Java 中的基础数据类型 (primitivedatatype) 。而这种直接将一个基础数据类型传给其相应的封装类(wrapperclass) 的做法,便是自动装箱(Autoboxing) 。在 jdk1.5 中,自动装箱首次被引入。而在jdk1.5 之前,如果你想要定义一个value 为 100 的 Integer 对象,则需要这样做:Integeri=newInteger(100);原理我们在以上代码“ Integeri=100; ”处打一个断点,跟踪一下。接下来,我们可以看到,程序跳转到了 Integer 类的valueOf(inti) 方法中/*Returnsa Integer instancerepresentingthespecified* int value.*Ifanew Integer instanceisnotrequired,t

      2、hismethod*shouldgenerallybeusedinpreferencetotheconstructor*link#Integer(int),asthismethodislikelytoyield*significantlybetterspaceandtimeperformancebycaching*frequentlyrequestedvalues.*paramian int value.*returna Integer instancerepresenting i .*since1.5*/publicstaticIntegervalueOf(inti)if(i=-128&i=IntegerCache.high)returnIntegerCache.cachei+128;elsereturnnewInteger(i);换句话说,装箱就是jdk 自己帮你完成了调用Integer.valueOf(100) 。定义Integerinteger100=100;intint100=integer100;从上面的代码中, 大家可看出 integer100 为一个 Integer 类

      3、型的引用, int100 为一个 int 类型的原始数据类型。但是,我们可以将一个 Integer 类型的对象赋值给其相应原始数据类型的变量。 这便是拆箱。拆箱与装箱是相反的操作。装箱是将一个原始数据类型赋值给相应封装类的变量。 而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。装箱、拆箱的名字也取得相当贴切。原理 笔者相信大家也都猜到了,拆箱过程中 jdk 为我们做了什么。我们还是通过实验来证明我们的猜想吧。在以上代码的第二行代码打上断点,即在intint100=integer100; ”上打上断点,跟踪一下。方法。我们可以看到,程序跳转到了 Integer 的 intValue()/*ReturnsthevalueofthisInteger asan* int .*/publicintintValue()returnvalue;对于以将其返回也就是, jdk 帮我们完成了对intValue() 方法的调用。对于以上的实验而言,便是调用 integer100 的 intValue() 方法,将其返回 值赋给了 int100 。实验 1Integerinteger400=400

      4、;intint400=400;System.out.println(integer400=int400);在以上代码的第三行中, integer400 与 int400 执行了=运行。而这两个是不同类型的变量, 到底是 integer400 拆箱了, 还是 int400装箱了呢?运行结果是什么呢?= 运算是判断两个对象的地址是否相等或者判断两个基础数据类型的值是否相等。所以,大家很容易推测到,如果 integer400 拆箱了,则说明对比的是两个基础类型的值,那此时必然相等,运行结果为 true ;如果 int400 装箱了,则说明对比的是两个对象的地址是否相等,那此时地址必然不相等,运行结果为 false 。(至于为什么笔者对它们赋值为400,就是后面将要讲到的陷阱有关)。我们实际的运行结果为 true 。所以是 integer400 拆箱了。对代码跟踪的结果也证明这一点。实验 2Integerinteger100=100;intint100=100;System.out.println(integer100.equals(int100);在以上代码的第三行中, integer100

      5、 的方法 equals 的参数为int100 。我们知道equals 方法的参数为 Object ,而不是基础数据类型,因而在这里必然是int100 装箱了。对代码跟踪的结果也证明了这一点。其实,如果一个方法中参数类型为原始数据类型,所传入的参数类型为其封装类,则会自动对其进行拆箱;相应地,如果一个方法中参数类型为封装类型, 所传入的参数类型为其原始数据类型, 则会自动对其进行装箱。实验 3Integerinteger100=100;intint100=100;Longlong200=200l;System.out.println(integer100+int100);System.out.println(long200=(integer100+int100);System.out.println(long200.equals(integer100+int100);在第一个实验中,我们已经得知,当一个基础数据类型与封装类进行=运算时,会将封装类进行拆箱。那如果+、 - 、 *、 / 呢?我们在这个实验中,就可知道。如果 +运算,会将基础数据类型装箱,那么:? 第 4 行中, integ

      6、er100+int100 就会得到一个类型为 Integer且 value 为 200 的对象 o, 并执行这个对象的 toString() 方法, 并输 出” 200”;? 第 5 行中, integer100+int100 就会得到一个类型为 Integer且 value 为 200 的对象 o, =运算将这个对象与long200 对象进行对比,显然,将会输出 false ;? 第 6 行中, integer100+int100 就会得到一个类型为 Integer且value为200的对象o, Long的equals方法将long200与o对比,因为两都是不同类型的封装类,因而输出 false ;如果 +运算,会将封装类进行拆箱,那么:? 第 4 行中, integer100+int100 就会得到一个类型为 int 且value为200的基础数据类型b,再将b进行装箱得到o,执行这个对象的 toString() 方法,并输出” 200”;? 第 5 行中, integer100+int100 就会得到一个类型为 int 且value 为 200 的基础数据类型b1, =运算将long200 进行拆箱得到b2,显然 b1=b2,输出 true ;? 第 6 行中, integer100+int100 就会得到一个类型为 int 且value为200的基础数据类型b, Long的equals方法将b进行装箱,但装箱所得到的是类型为Integer的对象o,因为。与long200为不同的类型的对象,所以输出 false ;程序运行的结果为 :200truefalse第二种推测是正确, 即在+运算时,会将封装类进行拆箱。

      《Java自动装箱与拆箱及其陷阱分析》由会员桔****分享,可在线阅读,更多相关《Java自动装箱与拆箱及其陷阱分析》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.