为什么我使用此代码
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));
它输出真的吗?
答案 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。