列表与 Arrays.asList 构造的列表的差异有令人惊讶的结果。为什么?

List difference with list constructed by Arrays.asList has surprising result. Why?

在以下代码段具有 运行 之后,您期望 "zs" 的值是多少?

Collection<Integer> xs = Arrays.asList(1,2,3);
int[] ys = {1};
List<Integer> zs = new ArrayList<>(xs);
zs.removeAll(Arrays.asList(ys));

我本来期望一个包含 2 和 3 的列表。但是,对于 JDK 1.8.0_25 在 Eclipse 4.5 M7 中,它是一个包含 1、2、3 的列表。删除没有影响。但是,当我将 "ys" 指定为非原始数组时,我得到了预期的结果:

Collection<Integer> xs = Arrays.asList(1,2,3);
Integer[] ys = {1};
List<Integer> zs = new ArrayList<>(xs);
zs.removeAll(Arrays.asList(ys));

这是怎么回事?

Arrays.asList(int[])的类型是List<int[]>。因此,xs 中的 none 个元素包含在该列表中。