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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张老师的高新技术视频中讲到Arrays.asList()的方法处理int[]和String[] 时的差异,代码如下:
  1. int[] a1=new int[]{1,2,3};
  2. String a2=new String[]{"a","b","c"};
  3. System.out.println(Arrays.asList(a1)); //打印[[I@1cfb549]
  4.                 System.out.println(Arrays.asList(a2));        //打印[a,b,c]
复制代码
为什么会是这样的呢?我只听懂了好像是什么jdk1.4和jdk1.5的差异造成的,有那位大神能详细解释下吗?


评分

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

查看全部评分

4 个回复

倒序浏览
因为int[] 是一个数组,是一个object[] 类型的,所以在aslist的时候会把a1当作数组中的一个元素,

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3 赞一个!

查看全部评分

回复 使用道具 举报
而String[] 可以看成数组的数组,每个字符串也可以看作一个数组,所以在aslist的时候就被分成了你打印的结果,仅供参考,没做测试

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3 赞一个!

查看全部评分

回复 使用道具 举报
因为虚拟机是把int[]数组当成一个对象处理的,而String[]数组里封装的是对象,所以打印出来是[a,b,c]
楼主可以试试打印Integer[] ,输出结果会是[1,2....]

评分

参与人数 1黑马币 +3 收起 理由
狼王 + 3 赞一个!

查看全部评分

回复 使用道具 举报
ysunday 发表于 2013-12-2 20:28
因为int[] 是一个数组,是一个object[] 类型的,所以在aslist的时候会把a1当作数组中的一个元素, ...

呵呵,谢谢啊,不过反复看了几遍后终于明白了。出现这种情况的原因是:在jdk1.4中,asList方法的参数类型是元素为Object类型的数组,而到了jdk1.5,asList方法的参数类型是可变参数,序列作为数组的列表。并且可以用泛型指定类型。 j dk1.5要兼容jdk1.4,会优先走jdk1.4中的方法。当传入String类型数组时,存放的是String类对象,因此会走jdk1.4中的asList方法,再把元素打散装入List集合中返回一个List集合。当传入int型数组时,由于int型是基本数据类型,不符合jdk1.4asList方法,因此走jdk1.5asList方法,jdk1.5中的方法会把整个int型数组当作一个参数,且不会打散,因为参数是可变的,当作只有一个参数,是int[]型的,打印时作为一整个数组打印hashCode值。

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 很给力!继续努力哈。。。

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马