体验J2SE 1.5新特性之装箱和拆箱
http://tech.ddvip.com 2006年11月27日 社区交流
本文详细介绍体验J2SE 1.5新特性之装箱和拆箱
2. 使用Autoboxing和Auto-Unboxing
使用Autoboxing和Auto-Unboxing,并不需要什么特别的步骤,一切都会在编译器的安排下自动发生。
现在可以这样来对待一个int型的数据:
清单3:自动完成的Boxing操作
Collection al = new ArrayList();
al.add(1);因为编译器会悄悄的把这段代码转换成接近这个样子:
清单4:作了Autoboxing之后的等价形式
Collection al = new ArrayList();
al.add(Integer.valueOf(1));这里所用的能接受int类型的值为参数,生成Integer实例的valueOf方法,是J2SE 1.5中新加入的内容。其它包裹类也都有可以接受对应的基本类型的值为参数,生成对应的包裹类实例的valueOf方法加入。
而这样对待一个Integer型的对象也是可以的:
清单5:自动完成的Unboxing操作
Integer one = new Integer(1);
int two = one + 1;因为编译器会悄悄的把这段代码转换成类似这个形状:
清单6:作了Auto-Unboxing之后的等价形式
Integer one = new Integer(1);
int two = one.intValue() + 1;大体上,只要把一个结果类型是基本类型的表达式,放到需要让它们的包裹类出现的位置上,就会诱发Autoboxing;类似的,只要把一个结果类型是包裹类的表达式,放到只允许相应的基本类型出现的位置上,就会诱发Auto-Unboxing。
“Autoboxing/Auto-Unboxing”特性的来源
J2SE 1.5中增加的许多语言特性都可以在C#里找到对应的东西。不过根据Bruce Eckel对Joshua Bloch的采访,尽管Java的研发小组确实很关注C#(Joshua Bloch本人的案头就放着一本关于C#的书),但是只有“Autoboxing/Auto-Unboxing”和“Metadata”确实是从C#中直接借鉴来的特性。
责编:豆豆技术应用