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

Chr*_*ith 9 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));
Run Code Online (Sandbox Code Playgroud)

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

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

它输出真的吗?

Kon*_*kov 7

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

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

public static <T> List<T> asList(T... a)
Run Code Online (Sandbox Code Playgroud)

内部的varargs是一个对象数组(ot类型T).但是,int[]与此定义不匹配,这就是为什么它int[]被视为一个单一对象.

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