Java原始数组List.contains不能按预期工作

时间:2015-05-22 14:21:18

标签: java arrays collections primitive primitive-types

为什么我使用此代码

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));

它输出真的吗?

2 个答案:

答案 0 :(得分:7)

Arrays.asList(int[])将返回List<int[]>,这就是输出为false的原因。

此行为的原因隐藏在Arrays.asList()方法的签名中。它&#39; S

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

varargs在内部是一个对象数组(ot type T)。但是,int[]与此定义不匹配,这就是int[]被视为单个对象的原因。

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

答案 1 :(得分:3)

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

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