黑马程序员技术交流社区

标题: java中自动装箱是如何触发的,满足什么条件才能自动装箱 [打印本页]

作者: 梅雄新    时间: 2012-2-3 15:54
标题: java中自动装箱是如何触发的,满足什么条件才能自动装箱
本帖最后由 梅雄新 于 2012-2-4 14:07 编辑

求教高手指点遇到的问题

int [] a1 = new int[]{1,2,3};
int [] a2 = new int[4];
int[] [] a3 = new int[2][3];
String[] a4 = new String[3];

Object aobj1 = a1;
Object aobj2 = a4;
Object[] aobj3 = a1;  
Object[] aobj4 = a3;
Object[] aobj5 = a4;

Object[] aobj3 = a1;  为什么这个编译出错 a1数组中的确是基本数据类型,这里为什么不能自动装箱成对应的Integer对象呢
而Integer[] m ={1,2,3,4};又可以呢,自动装箱在什么情况下是成立的呢
感觉有点理解不清晰,请师兄指教,谢谢
作者: 张伟~    时间: 2012-2-3 16:09
本帖最后由 张伟~ 于 2012-2-3 16:35 编辑

基本类型不属于Object,Object[] aobj3 = a1; 左边数组里装的是Object,而右边数组装的是int类型,所以Object[] aobj3 = a1;是错误的。
至于自动装箱包装的是基本类型,还不能包装数组吧

作者: 刘基军    时间: 2012-2-3 16:27
本帖最后由 刘基军 于 2012-2-3 16:29 编辑

恩,数组不行的
下面那句,实际上将int值分别装箱进行存储的
作者: 黄秋    时间: 2012-2-3 17:27
编译时提示:
不兼容的类型
找到: int[]
需要: java.lang.Object[]
                Object[] aobj3 = a1;  
                                 ^
就是左边是Object[]类型,右边是int[],不行。

Integer[] aobj3 = a1; --- 也不行,int[] 无法转成 Integer[] 。

Integer[] m ={1,2,3,4};
Object[] aobj3 = m;    ---- 这可以,是因为Integer 继承于Object,是其子类,根本不涉及到装箱、拆箱,int不能,是因为它不是一个正式的类。JDK5 之后,单个int 可自动装箱,但int[] 仍无法转成 Integer[]。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2