Java 原始数组 List.contains 没有按预期工作

Java primitive array List.contains does not work as expected

为什么当我使用这段代码时,

int[] array = new int[3];
array[0] = 0;
array[1] = 1;
array[2] = 2;
System.out.println(Arrays.asList(array).contains(1));

它输出错误。但是当我使用这段代码时,

Integer[] array = new Integer[3];
array[0] = 0;
array[1] = 1;
array[2] = 2;
System.out.println(Arrays.asList(array).contains(1));

它输出 true?

Arrays.asList(array)int[] 转换为具有单个元素(输入数组)的 List<int[]>。因此该列表不包含 1.

另一方面,System.out.println(Arrays.asList(array).contains(array)); 将为第一个代码片段打印 true。

Arrays.asList(int[]) 将 return 变成 List<int[]>,这就是输出为 false.

的原因

此行为的原因隐藏在 Arrays.asList() 方法的签名中。这是

public static <T> List<T> asList(T... a)

可变参数在内部是一个对象数组(不是类型T)。但是,int[] 不符合此定义,这就是为什么 int[] 被视为一个单独的对象。

同时,Integer[]可以被视为类型T的对象数组,因为它由对象(但不包括基元)组成。