体验J2SE 1.5新特性之装箱和拆箱

http://tech.ddvip.com   2006年11月27日    社区交流

本文详细介绍体验J2SE 1.5新特性之装箱和拆箱

  3. 发生Autoboxing的具体时机

  发生Autoboxing的具体时机,主要有这么三种:

  把基本类型的数据赋给引用类型的变量时。例如把一个int型的数据赋给一个Integer型变量。

  清单7:赋给引用类型的变量基本类型的数据

Integer i = 31415;

  把基本类型的数据传给引用类型的参数时。例如给一个定义成Object的参数传递一个boolean型的数据。

  清单8:传给引用类型的参数基本类型的数据

HashMap map = new HashMap();
map.put(true, null);

  把基本类型的数据往引用类型上强制转化时。例如在一个long型的数据前面加上(Long)。

  清单9:从基本类型的数据到引用类型上强制转化

System.out.println((Long) 27828L);

  4. Autoboxing的局限

  Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。

  类似这样的代码是不能工作的,尽管int型的数据完全可以用一个Long对象来表示:

  清单10:不能同时进行自动向上转型和Autoboxing

int i = 27828;
System.out.println((Long) i);/* 编译时出错 */

  这是因为这段代码实际上相当于:

  清单11:Autoboxing操作会在自动向上转型之前发生

int i = 27828;
System.out.println((Long) Integer.valueOf(i));/* 编译时出错 */

  而Integer并不是Long的子类,所以这个转化无法进行。如果一定要进行这种操作,需要手工追加一次转型:

  清单12:需要先强制向上转型,再作Boxing

int i = 27828;
System.out.println((Long)(long) i);

  5. 发生Auto-Unboxing的具体时机

责编:豆豆技术应用

正在加载评论...