<b>体验J2SE 1.5新特点之装箱和拆箱</b>[Java编程]
本文“<b>体验J2SE 1.5新特点之装箱和拆箱</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
J2SE 1.5供应了“Autoboxing”和“Auto-Unboxing”的机制,可以让编译器来自动完成在基本范例和它们的包裹对象之间的转化工作,从而可以用一种更简单的方法,来避免同时存在两套范例系统所带来的一些麻烦.本文介绍Autoboxing/Auto-Unboxing机制的利用办法、实质、发生机会、范围、对重载机制的影响以及对性能的阻碍等问题.
传统上,在Java程序中,可以往一个容器类(无论是Collection还是Map)里直接放入一个对象;但是假如打算放入的是一个数字、字符或布尔值的话,就要先加入一个“生成包裹它们的对象”的步骤.
造成这种现象的缘由是,在Java语言当中一向存在着两套非常差别的范例系统:
一套是所谓的“引用范例”(Reference Types),包含全部的类和接口.这些范例的数据被看做对象,所以可以用一个Object型的变量来保存.
一套是所谓的“基本范例”(Primitive Types),包含:byte、short、int、long、float、double、char和boolean.这些范例的数据不是对象,因此也不能用Object型的变量来保存.
同时采取这样两套范例系统,可以得到一些性能方面的好处——因为基本范例的数据不是对象,所以成立得更快、占用的空间更少、收回它们占用的资源也更简单;但是,这样的做法同时也会造成一些编码方面的问题——比方,不能定义一个变量(或数组),让它既能保存基本范例的数据,又能保存引用范例的数据(近似的,也不能定义一个同时能匹配这两种范例的数据的形参,不过这个问题可以借助Java里的重载机制来躲避).
实际上需求定义“不知道用来保存什么范例的数据”的变量(和形参)时,普通对这个问题采纳躲避的态度,将它们的范例定义成Object,然后借助可以称为“Boxing”和“Unboxing”的操作来办理Object不能涵盖基本范例的问题.
1. Boxing和Unboxing操作
所谓Boxing操作,是指通过生成一个能包裹基本范例数据的对象,来让基本范例的数据呈目前只能承受引用范例的地方.
清单1:手工Boxing的典型情形
Collection integers = new ArrayList();
for(int i = 0; i < 10; i++) {
integers.add(new Integer(i));
}
用于生成这些的对象的类,被称作“包裹类”(Wrapper Classes).Java中的包裹类有Byte 、Short、Integer、Long、Float、Double、Character和Boolean(都在java.lang包里定义)等八种,辨别用于包裹byte、short、int、long、float、double、char和boolean范例的数据.
而所谓Unboxing操作,则是指调用包裹类对象的呼应办法,得到它们所代表的“基本范例的数据”,以便举行进一步的处理.
清单2:手工Unboxing的典型情形
for(Iterator itr = integers.iterator(); itr.hasNext(); ) {
Integer i = (Integer) itr.next();
System.out.println(i.intValue() + 1);
}
而在Java语言的最新版本——J2SE 1.5中,供应了“Autoboxing”和“Auto-Unboxing”的机制,可以让编译器来自动完成这些琐碎的操作,从而用一种更简单的方法,来整合两套范例系统.
熟习的陌生名词
固然这一对操作的历史很长久,但是把它们称作“Boxing”和“Unboxing”的做法,基本是在呈现“Autoboxing”和“Auto-Unboxing”的概念之后,才得到了遍及的承受.在那之前,它们仿佛并没有通用的、专门的名字.不过由于当时也很少说起这两个概念,所以这个问题倒也没有造成什么严重的影响.
以上是“<b>体验J2SE 1.5新特点之装箱和拆箱</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |