体验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的具体时机
责编:豆豆技术应用
正在加载评论...