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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王洪波 中级黑马   /  2013-5-14 08:35  /  1253 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王洪波 于 2013-5-14 12:18 编辑

int[] a= new int[]{1,2,3};
List<int> list = Arrays.asList(a); //想将数组转换为集合,编译器报错
改为 :LList<Integer> list = Arrays.asList(a);编译器还报错。
这到底是为什么呢?

7 个回复

倒序浏览
你何不尝试一下去掉泛型,打印list.size(),你就会发现asList()方法,其实是将a作为一个int[]数组对象看
回复 使用道具 举报
本帖最后由 张洪慊 于 2013-5-14 08:55 编辑
  1. List<int> list = Arrays.asList(a);
  2. /*
  3. 这里指定集合中元素的类型为int
  4. 集合中不能存入基本类型的元素
  5. 而是存储的对象的引用
  6. */
  7. 修正为:
  8. List<int[]>list=Arrays.asList(a);
  9. 最后一点:int[] (整形数组引用)和 Integer(整形的包装类 类型) 属于不同类型
复制代码
回复 使用道具 举报
本帖最后由 本人已死 于 2013-5-14 09:05 编辑

瞅瞅、。。
回复 使用道具 举报
本帖最后由 飞鸟青崖 于 2013-5-14 09:15 编辑

第一:泛型只能添加引用数据类型,List<int>中的int是基本数据类型,所以会报错。如果想添加的话,就添加List<int[]>,因为数组是一个引用数据类型。
第二:当把一个基本数据类型的数组传入到asList()中时,返回的是这个数组的地址,并不是数组中的元素。
          只有把引用数组类型的数组添加到asList()中时,返回的才是数组中的元素。
          所以第二句话也会报错。
你可以把程序改为:
  1. Integer[] a= new Integer[]{1,2,3};
  2.                 List<Integer> list = Arrays.asList(a);
复制代码
这样就没问题了。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
飞鸟青崖 发表于 2013-5-14 09:07
第一:泛型只能添加引用数据类型,List中的int是基本数据类型,所以会报错。如果想添加的话,就添加List,因 ...

是的,同意楼上。顶一下
回复 使用道具 举报
泛型只支持引用类型。。
不能使用int,应该使用Integer
回复 使用道具 举报
如果问题解决,及时结贴。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马