体验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#中直接借鉴来的特性。

责编:豆豆技术应用

正在加载评论...