A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TTc 中级黑马   /  2014-4-9 16:01  /  1100 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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)

  这点没有搞明白



评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
3点提示,希望能帮到你。如下面代码所示。
  1.                 //1.Object[] obj1指的是一个存有对象的元素的数组,即其元素必须是Object对象。a中的元素都是基本数据类型,不是Object对象,当然a就不能被赋值给obj1.
  2.                 Object[] obj1 = a;//编译时失败
  3.                 //2.a1这个数组是二维数组,其实a1可以看成就是一个特殊的一维数组,al这个数组的元素是3个数组,数组是Object对象,所以可以说a1的三个元素都是对象,那么自然可以把a1赋值给obj2 ;
  4.                 Object[] obj2 =a1; //编译成功  (1)是因为 A1数组里装的INT数组是OBJECT 所以可以
  5.                 //3.List内存储的是Object对象,int 类型数据(1,3,4)不是属于Object,那么会整个数组被当做一个对象存入List中.
  6.                 System.out.println(Arrays.asList(a));
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
数组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集合中。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
╰青青子佩ˊゝ 发表于 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[] ),但是怎么输出的结果会和一维数组的结果相似。
回复 使用道具 举报
结果不相同啊。
  1. int[] a1 = new int[]{1,4,6};
  2.                  int[][] a2 = new int[][]{{2,4},{5,7}};
  3.                  List list1 = Arrays.asList(a1);
  4.                  List list2 = Arrays.asList(a2);
  5.                  //1.下面代码的结果为[[I@1bab50a].
  6.                  System.out.println(list1);
  7.                  //2.下面代码结果为[[I@c3c749, [I@150bd4d].两个输出结果(元素的引用地址)根本不同啊。
  8.                  System.out.println(list2);
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马