黑马程序员技术交流社区

标题: 令人郁闷的一个问题 [打印本页]

作者: 王洪波    时间: 2013-5-14 08:35
标题: 令人郁闷的一个问题
本帖最后由 王洪波 于 2013-5-14 12:18 编辑

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

作者: 符立波    时间: 2013-5-14 08:48
你何不尝试一下去掉泛型,打印list.size(),你就会发现asList()方法,其实是将a作为一个int[]数组对象看
作者: 张洪慊    时间: 2013-5-14 08:50
本帖最后由 张洪慊 于 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:01
本帖最后由 本人已死 于 2013-5-14 09:05 编辑

瞅瞅、。。

作者: 飞鸟青崖    时间: 2013-5-14 09:07
本帖最后由 飞鸟青崖 于 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);
复制代码
这样就没问题了。
作者: 尖卡斌引    时间: 2013-5-14 09:34
飞鸟青崖 发表于 2013-5-14 09:07
第一:泛型只能添加引用数据类型,List中的int是基本数据类型,所以会报错。如果想添加的话,就添加List,因 ...

是的,同意楼上。顶一下
作者: 刘胜寒    时间: 2013-5-14 12:15
泛型只支持引用类型。。
不能使用int,应该使用Integer
作者: 刘胜寒    时间: 2013-5-14 12:15
如果问题解决,及时结贴。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2