体验J2SE 1.5新特性之装箱和拆箱
http://tech.ddvip.com 2006年11月27日 社区交流
本文详细介绍体验J2SE 1.5新特性之装箱和拆箱
清单22:可以同时进行Auto-Unboxing和强制向上转型
Integer i = new Integer(32);
System.out.println((double) i);7. 其它不能自动转化的情况
除去强制类型转化时的限制之外,还有这样一些情况下不会发生Autoboxing/Auto-Unboxing:
1. 基本类型的数组和包裹类数组之间不会自动转化。这样的代码完全不被编译器接受:
清单23:元素可以,容器不行
int[] ints = {1, 2, 3};
Integer[] integers = ints;/* 编译时出错 */2. 不能对着基本类型的表达式来调用包裹类里的方法。这样的申请会被编译器彻底拒绝:
清单24:没有方法,就是没有方法
int i = 1;
byte b = i.byteValue();/* 编译时出错 */8. null的转化问题
Java里的引用类型可以有一个特别的取值——“null”。试图对null进行Auto-Unboxing操作会导致一个“NullPointerException”。
例如这段代码就会在运行时抛出异常,尽管在编译期间会表现得非常正常:
清单25:表面上,只是普通的赋值
Integer i = null;
int j = i;/* 运行时错误 */这是因为这段代码实际上相当于:
清单26:实际上,是在试图调用null的方法
Integer i = null;
int j = i.intValue();/* 运行时错误 */而试图调用null的方法是一种不被虚拟机认可的行为。
如果没记住有关的规则
大部分违反了使用“Autoboxing/Auto-Unboxing”机制时,需要遵守的约束的代码,都会造成编译错误。因此,即使并未准确的记住有关的规则,也不难及时发现、改正。只有违背了“不能对null进行Auto-Unboxing操作”的限制时,引发的是运行时异常,需要特别小心。
责编:豆豆技术应用
正在加载评论...