整数和int数组的包含所有行为的差异(Java)

时间:2013-05-03 23:23:57

标签: java collections wrapper primitive

有人可能会解释为什么会这样:

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

打印“假”?

3 个答案:

答案 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)

在感谢你的问题之前,我自己都不知道。