黑马程序员技术交流社区
标题:
令人郁闷的一个问题
[打印本页]
作者:
王洪波
时间:
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 编辑
List<int> list = Arrays.asList(a);
/*
这里指定集合中元素的类型为int
集合中不能存入基本类型的元素
而是存储的对象的引用
*/
修正为:
List<int[]>list=Arrays.asList(a);
最后一点: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()中时,返回的才是数组中的元素。
所以第二句话也会报错。
你可以把程序改为:
Integer[] a= new Integer[]{1,2,3};
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