黑马程序员技术交流社区
标题:
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