版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六单元自动拆箱和装箱自动拆箱和装箱概念自动拆箱和装箱使用6.7.1自动拆箱和装箱概念自动拆箱和装箱,其目的是为了方便基本数据类型和其对应的包装类型之间的转换。我们可以直接把一个基本数据类型的值赋给其包装类型(装箱),反之亦然(拆箱),中间的过程由编译器自动完成。编译器对这个过程也只是做了简单的处理,通过包装类的valueOf()方法对基本数据类型进行包装,通过包装类的类似intValue()方法得到其基本数据类型。IntegerstuAgeI=23;IntstuAge=stuAgel;编译器将其自动变换为:IntegerstuAgel=Integer.valueOf(23);intstuAge=stuAgeI.intValue();6.7.2自动拆箱和装箱使用自动拆箱和装箱看起来非常简单,也很容易理解,但是我们在使用过程中,尤其是在自动装箱后,在两个对象之间使用“==”运算符进行比较时,其结果尤其需要注意。publicclassTestBox{publicstaticvoidmain(String[]args){IntegerstuAgeI1=23;System.out.println("过年了,年龄增长了一岁,现在年龄是:"+(stuAgeIl+1));IntegerstuAgeI2=23;System.out.println("stuAgeIl==stuAgeI2(值均为23)的结果是:"+(stuAgell==stuAgeI2));stuAgell=323;stuAgeI2=323;System.out.println("stuAgeIls==stuAgeI2(值均为323)的结果是:"+(stuAgell==stuAgeI2));System.out.println("stuAgeII.eqqals(stuAgeI2)(值均为323)的结果是"+(stuAgelI.equals(stuAge12)));}}6.7.2自动拆箱和装箱使用看到上面的运行结果,大家可能会很困惑,为什么当stuAgeI1和stuAgeI2这两个对象里存的值均为23时,使用“==”进行比较,其结果为true,而当这两个对象的值为323时,其结果却为false了!这是因为这些包装类的valueOf()方法,对部分经常使用的数据,采用缓存技术,也就是在未使用的时候,这些对象就创建并缓存着,需要使用的时候不需要新创建该对象,直接从缓存中获取即可,从而提高性能。例如Byte、Integer和Long这些包装类都缓存了数值在-128〜+127之间的对象,自动装箱的时候,如果对象值在此范围之内,则直接返回缓存的对象,只有在绞存中没有的时候再去创建一个对象。当第一次比较stuAgeI1和stuAgeI2这两个对象时,因为其值在-128〜+127之间,所以这两个对象都是直接返回的缓存对象,使用==比较时结果为true。而第二次比较stuAgeI1和stuAgeI2这两个对象时,其值超出了-128〜+127的范围,需要通过new方法创建两个新的包装类对象,所以再使用“==”比较时结果为false。6.7.2自动拆箱和装箱使用6.8泛型在之前使用集合的时候,装入集合的各种类型的对象都被当作Object对待,失去了自己的类型,而从集合中取出对象时需要进行类型转换,效率低下且容易出错。如何解决这个问题?可以使用泛型解决这个问题。接下来以《租车系统》的代码为例,通过泛型(即定义集合时同时定义集合中元素的类型)的方式,解决程序可读性以及强制类型转换时的稳定性问题。importjava.util.*;importorg.unitthree.*;classTestZuChe3{publicstaticvoidmain(String[]args){//使用泛型保证集合里的数据元素都是Vehicle类及其子类List<Vehicle>vehAL=newArrayList<Vehicle>();Vehiclecl=newCar("战神","长城");Vehiclec2=newCar("跑得快",”红旗");Vehicletl=newTruck("大力士","5吨");Vehiclet2=newTruck("大力士二代","10吨");vehAL.add(cl);vehAL.add(c2);vehAL.add(tl);vehAL.add(1,t2); //在集合索引1处添加t2//vehAL.add("大力士三代");//编译错误,添加的不是Vehicle1类型System.out.println("***显示《租车系统》中全部车辆信息***");//使用增强for循环遍历时,获取的已经是Vehicle对象for(Vehicleobj:vehAL){obj.show();}}}List<Vehicle>vehAL=newArrayList<Vehicle>();这句代码的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 偏(均)三甲苯装置操作工安全生产知识竞赛考核试卷含答案
- 胶带机移设机司机岗位安全责任制测试考核试卷含答案
- 硫磺制酸及余热发电项目可行性研究报告模板-备案审批
- 设备采购安装调试方案,设备供货方案
- 全国计算机等级考试(NCRE)一级网络安全素质教育样题及参考答案
- 厂房、库房拆除工程施工方案文档
- 2026年建筑消防设施施工现场测试题库(含答案)
- 2026年人工智能训练师(四级)专业能力考核试题及答案
- 2026年保健食品监管试题库及答案
- HIPS装置丁二烯橡胶接枝工艺优化对投资回报率的敏感性分析
- T 132-2026《检验检测机构数字化建设指南》全员培训宣贯
- 2026北仑区市场监督管理局新碶市场监督管理所招聘编外人员1人考试模拟试题及答案详解
- 2026秋沪教版(五四制)新教材 八上数易错知识点梳理+每课易错填空自测练习题(含答案)
- 2026学年湖北省武汉市四年级数学期末深度自测重点试卷(详细参考解析)详细答案和解析
- 公司车辆使用管理制度文档模板
- 部编人教版2026-2026学年七年级语文第一学期教学工作计划
- 内镜常见故障及处理课件
- 运动训练学理论
- 民建入会申请书
- 八年级物理经验交流 全省一等奖
- 医学影像学-头颈部
评论
0/150
提交评论