BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #53965同步于 2016/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

新手求教一个asList()的问题

czt418022249
2016/11/18镜像同步7 回复
先上asList的文档: 然后是代码 package homgwork6; import java.util.*; public class Test1{ public static void main (String[] args){ Integer[] a = {1,2,3,4}; //Integer b = 5; List list = Arrays.asList(a); //list.set(0,b); System.out.println("列表中的元素数是: "+list.size()); System.out.println(list); //boolean isIn = list.contains(1); //System.out.println(isIn); } } 输出结果: 问题:如果数组a类型改为int,则输出元素数为1,而不是4,且输出list为一个地址,求问这是什么原因(见下图)
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
axpq110机器人#1 · 2016/11/18
System.out.println(Arrays.asList(new int[]{1, 2, 3})); System.out.println(Arrays.asList(new Integer[]{1, 2, 3})); <T> 接收元素为对象, int 是基本数据类型不是对象,所以数组整体被当成了一个元素,得到了 List<int[]> 而不是 List<Integer>
czt418022249机器人#2 · 2016/11/18
多谢~再问下这个List<int[]>可以看做Object类对象吗? 【 在 axpq110 的作中提到: 】 : [code=java] : System.out.println(Arrays.asList(new int[]{1, 2, 3})); : System.out.println(Arrays.asList(new Integer[]{1, 2, 3})); : ...................
dongshilang机器人#3 · 2016/11/18
当然可以 【 在 czt418022249 的大作中提到: 】 : 多谢~再问下这个List<int[]>可以看做Object类对象吗? : : : ................... 发自「贵邮」
nuanyangyang机器人#4 · 2016/11/18
编译器给你警告了吗?编译器应该会认为这句`List list = Arrays.asList(a);`有歧义。原因是,这句话可以理解成: 1. 我要创建一个`List<Integer>`类型的列表,列表里每个元素都是Integer,即数组a里面的各个元素。 2. 我要创建一个`List<Integer[]>`类型的列表,列表里每个元素都是Integer[]型的数组。而这个外层的列表里面只有一个元素,就是那唯一的数组a。 这个歧义是因为Java开始支持“vararg”函数(不定参数个数的函数)以后引起的。你需要加一层类型转换来避免歧义。如果你的意思是第一个,就这样写: ```java List<Integer> list = Arrays.asList(a); System.out.println(list); // [1, 2, 3, 4, 5] ``` 如果你的意思是第二个,就这样写: ```java List<Integer[]> list = Arrays.<Integer[]>asList(a); System.out.println(list); // [[Ljava.lang.Integer;@6ce253f1] ``` 不要使用不带类型参数的`List`类型,而是写明`List<Integer>`还是`List<Integer[]>`。 至于`int[]`的问题,Java里`int[]`和`Integer[]`的储存方式不同,不能直接转换。需要你手动一个元素一个元素地装箱一下。这是Java语言和JVM设计的缺陷。
czt418022249机器人#5 · 2016/11/18
多谢暖神指教~jdk1.8,eclipse没看到警告~多问一句为什么第二种形式输出跟第一种不一样?println只解析到List就不往下继续了吗? 【 在 nuanyangyang 的大作中提到: 】 : [md] : 编译器给你警告了吗?编译器应该会认为这句`List list = Arrays.asList(a);`有歧义。原因是,这句话可以理解成: : 1. 我要创建一个`List<Integer>`类型的列表,列表里每个元素都是Integer,即数组a里面的各个元素。 : ...................
czt418022249机器人#6 · 2016/11/18
好的,多谢~ 【 在 dongshilang 的大作中提到: 】 : 当然可以 : 发自「贵邮」
nuanyangyang机器人#7 · 2016/11/19
不只是输出格式不一样,那个list本来就不一样。 【 在 czt418022249 的大作中提到: 】 : 多谢暖神指教~jdk1.8,eclipse没看到警告~多问一句为什么第二种形式输出跟第一种不一样?println只解析到List就不往下继续了吗?