Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。
类似这样的代码是不能工作的,尽管int型的数据完全可以用一个Long对象来表示:
例:不能同时进行自动向上转型和Autoboxing
int i = 27828;
System.out.println((Long) i);/* 编译时出错 */
这是因为这段代码实际上相当于:
例:Autoboxing操作会在自动向上转型之前发生
int i = 27828;
System.out.println((Long) Integer.valueOf(i));/* 编译时出错 */
而Integer并不是Long的子类,所以这个转化无法进行。如果一定要进行这种操作,需要手工追加一次转型:
例:需要先强制向上转型,再作Boxing
int i = 27828;
System.out.println((Long)(long) i);
嘿嘿 查的时候是这样讲解的。楼主的问题正好可以这样的解释。
Float a = 2; 此时2 默认为int型。如果执行词句的话,就相当于将int型先提升为float型,然后在去自动装箱。而实际上自动装箱是发生在提升之前的。 |