黑马程序员技术交流社区
标题:
在听反射时出现的疑惑。
[打印本页]
作者:
TTc
时间:
2014-4-9 16:01
标题:
在听反射时出现的疑惑。
本帖最后由 TTc 于 2014-4-11 11:40 编辑
int[] a = new int[]{1,3,4};
int [][] a1 = new int[2][3];
Object[] obj1 = a;//编译时失败
Object[] obj2 =a1; //编译成功
(1)是因为 A1数组里装的INT数组是OBJECT
所以可以
编译成功
那么在jdk1.4中的Arrays中的静态方法asList(Object[] )中我将数组a作为参数调用
asList(object[])时返回的结果不是{1,3,4}。
(2)原因是传入的是INT类型数组不符合jdk1.4中的Arrays中的静态方法asList(Object[] )
所以调用的是jdk1.5里面的asList(T...a)
这点没有搞明白
作者:
╰青青子佩ˊゝ
时间:
2014-4-9 16:24
3点提示,希望能帮到你。如下面代码所示。
//1.Object[] obj1指的是一个存有对象的元素的数组,即其元素必须是Object对象。a中的元素都是基本数据类型,不是Object对象,当然a就不能被赋值给obj1.
Object[] obj1 = a;//编译时失败
//2.a1这个数组是二维数组,其实a1可以看成就是一个特殊的一维数组,al这个数组的元素是3个数组,数组是Object对象,所以可以说a1的三个元素都是对象,那么自然可以把a1赋值给obj2 ;
Object[] obj2 =a1; //编译成功 (1)是因为 A1数组里装的INT数组是OBJECT 所以可以
//3.List内存储的是Object对象,int 类型数据(1,3,4)不是属于Object,那么会整个数组被当做一个对象存入List中.
System.out.println(Arrays.asList(a));
复制代码
作者:
清风夜独醉
时间:
2014-4-9 17:34
数组a里面的元素是int类型,属于基本数据类型,不是Object对象。而Object[] obj1的元素都是Object对象,所以把数组a赋给obj1时会编译失败
数组a1是一个二维数组,其实可以看成是一个一维数组,它里面的元素也是一维数组,而数组本身就是一个Object对象,所以a1可以看成是一个装有数组对象的一维数组,那么Object[] obj2 = a1就可以编译成功了。
jdk1.4中Arrays的静态方法aslist(Object[])中的参数是一个Object类型的数组,而a是int类型的数组,不符合语法。而jdk1.5中Arrays的静态方法aslist(T...a)中的参数是可以传入一个int类型的数组,所以它调用的是这个方法,返回的是一个List对象,而List中存放的都是Object对象,所以会把数组a作为一个对象存入List集合中。
作者:
TTc
时间:
2014-4-9 18:52
╰青青子佩ˊゝ 发表于 2014-4-9 16:24
3点提示,希望能帮到你。如下面代码所示。
补充问下:int[] [] a2 = new int[][]{{1,2,3}{1,2,3}}; Object[] obj2 =a2;我把a2作为参数传到了Arrays.asList(obect [])方法里,输出的结果和传入一维数组的答案相似。我再想既然Arrays.asList(object [])接收的参数是必须是Object对象,所以应该是符合jdk1.4中的Arrays中的静态方法asList(Object[] ),但是怎么输出的结果会和一维数组的结果相似。
作者:
╰青青子佩ˊゝ
时间:
2014-4-9 20:00
结果不相同啊。
int[] a1 = new int[]{1,4,6};
int[][] a2 = new int[][]{{2,4},{5,7}};
List list1 = Arrays.asList(a1);
List list2 = Arrays.asList(a2);
//1.下面代码的结果为[[I@1bab50a].
System.out.println(list1);
//2.下面代码结果为[[I@c3c749, [I@150bd4d].两个输出结果(元素的引用地址)根本不同啊。
System.out.println(list2);
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2