版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六单元自动拆箱和装箱自动拆箱和装箱概念自动拆箱和装箱使用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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政法试题题库
- 工程索赔报告书实例
- 妊娠期高血糖孕期管理新进展
- 应用文满分策略3
- 专题06有理数的加减(3大考点9种题型)(原卷版)
- 人教部编版八年级语文上册《单元复习》公开示范课教学课件
- 降低患者外出检查漏检率-品管圈课件
- 五年级上册生命安全教育全册教案
- 六年级安全与环境教育教案
- JimWaters先生与沃特世公司的发展历程
- 马克·吐温及作品《哈克贝利·费恩历险记》素材课件
- 【初中数学 】第五章 相交线与平行线 章节练习题 2023-2024学年人教版数学七年级下册
- 工业产品质量安全风险监测实施规范
- 482023年广西职业院校技能大赛中职组《职业英语技能》赛项职场应用环节样题
- 高中化学教学学生高阶思维能力培养路径分析
- 原始记录书写培训课件
- 《数学家高斯》课件
- 2023年中国石化安庆石化公司校园招聘150人历年高频难易度、易错点模拟试题(共500题)附带答案详解
- 《小学生的自我保护》课件
- 项目质量管理与保障措施
- 2023年10月自考试题06089劳动关系与劳动法
评论
0/150
提交评论