返回信息流先上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为一个地址,求问这是什么原因(见下图)
这是一条镜像帖。来源:北邮人论坛 / java / #53965同步于 2016/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
新手求教一个asList()的问题
czt418022249
2016/11/18镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
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>
多谢~再问下这个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}));
: ...................
当然可以
【 在 czt418022249 的大作中提到: 】
: 多谢~再问下这个List<int[]>可以看做Object类对象吗?
:
:
: ...................
发自「贵邮」
编译器给你警告了吗?编译器应该会认为这句`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设计的缺陷。
多谢暖神指教~jdk1.8,eclipse没看到警告~多问一句为什么第二种形式输出跟第一种不一样?println只解析到List就不往下继续了吗?
【 在 nuanyangyang 的大作中提到: 】
: [md]
: 编译器给你警告了吗?编译器应该会认为这句`List list = Arrays.asList(a);`有歧义。原因是,这句话可以理解成:
: 1. 我要创建一个`List<Integer>`类型的列表,列表里每个元素都是Integer,即数组a里面的各个元素。
: ...................
不只是输出格式不一样,那个list本来就不一样。
【 在 czt418022249 的大作中提到: 】
: 多谢暖神指教~jdk1.8,eclipse没看到警告~多问一句为什么第二种形式输出跟第一种不一样?println只解析到List就不往下继续了吗?