有人可能会解释为什么会这样:
Integer[] arr1 = {1,2,3,4,5};
Collection<?> numbers = Arrays.asList(new Integer[]{1,2,3});
System.out.println(Arrays.asList(arr1).containsAll(numbers));
print“true”,而如果我们像这样交换Integer:
int[] arr2 = {1,2,3,4,5};
Collection<?> numbers2 = Arrays.asList(new int[]{1,2,3});
System.out.println(Arrays.asList(arr2).containsAll(numbers2));
打印“假”?
答案 0 :(得分:9)
在第二种情况下,每个列表由单个元素组成。这两个元素都是int []数组。包含较大数组的列表不包含包含较小数组的列表成员。
Arrays.asList()方法接受类型为T的参数的变量参数列表,并返回List<T>
。使用整数数组,T可以是Integer,返回类型为List。但是对于原始数组,T不能是int,因为不能有List<int>
。
答案 1 :(得分:0)
List是一个对象的集合,如果你在其中放置对象,它会很有用。当您尝试使用原始数组创建列表时,JVM非常友好,不会抛出异常,但无法根据需要创建列表。因此,当您使用整数数组创建列表时,您会看到输出的差异,这是有效的,并且当您使用int数组创建一个语法正确但逻辑上违反集合原则的列表时。
答案 2 :(得分:-1)
根据这个:What is the difference between an int and an Integer in Java and C#?
Integer是一个Object,int是原始的,它们不是直接相同的......
因此,在Java文档中,Collection.containsAll(Object o)需要一个Object而不是一个原语。 也许这解释了不同的
http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html#contains(java.lang.Object)
在感谢你的问题之前,我自己都不知道。