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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许智敏 中级黑马   /  2013-5-16 08:43  /  1588 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

asList返回的是一个受指定数组支持的固定大小的列表。可以通过集合的方法对数组的元素进行操作。

如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行存储。如果数组中的元素是基本数据类型数值,那么会将该数组作为集合中的元素进行存储。如:
int[] arr = {1,2,3,4};
List<int[]> list = Arrays.asList(arr);
sop(list);//打印[[I@c17164]
将arr数组装入list,list的大小为1.

但如果:
Integer[] arr = {1,2,3,4};
List<int[]> list = Arrays.asList(arr);
sop(list);//打印[1,2,3,4]
此时装入的是对象,list大小为4.

我的问题是:为什么不将int[] 中的基本数据类型自动装箱,在将对象存入集合操作?
两个arr都是引用数据类型,如果说因为集合中存储的是引用数据类型所以才将int[] arr存入的话,那么Integr[] arr也是引用数据类型,为什么不将Integer[] arr的数组引用存入集合?而是将里面的对象存入集合?求大神解答。。。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

2 个回复

正序浏览
乎¤_¤乎 发表于 2013-5-16 09:12
,asList会先去校对jdk1.4中asList的说明及asList(Object[] obj)
说明参数是一个数组,而int是基本类型,不 ...

为什么不在底层将int[]中的元素封装成对象呢?这样操作不是更方便么?
回复 使用道具 举报
,asList会先去校对jdk1.4中asList的说明及asList(Object[] obj)
说明参数是一个数组,而int是基本类型,不是Object的子类,所以无法使用这项,故有寻找jdk1.5后版本对asList函数的说明 即public static <T> List<T> asList(T... a)而这时候参数为一个对象,如果把int数组的对象传入,集合中就存放了一个数组,打印出来的就是该数组的地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马