Java网络程序设计 课件 单元6-06工具类_第1页
Java网络程序设计 课件 单元6-06工具类_第2页
Java网络程序设计 课件 单元6-06工具类_第3页
Java网络程序设计 课件 单元6-06工具类_第4页
Java网络程序设计 课件 单元6-06工具类_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六单元自动拆箱和装箱自动拆箱和装箱概念自动拆箱和装箱使用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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论