繁体   English   中英

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

[英]Difference in containsAll behavior for Integer and int arrays (Java)

有人可能解释为什么以下:

Integer[] arr1 = {1,2,3,4,5};
Collection<?> numbers = Arrays.asList(new Integer[]{1,2,3});
System.out.println(Arrays.asList(arr1).containsAll(numbers));

打印“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));

打印“假”?

在第二种情况下,每个列表由单个元素组成。 这两个元素都是int []数组。 包含较大数组的列表不包含包含较小数组的列表的成员。

Arrays.asList()方法接受类型为T的参数的变量参数列表,并返回List<T> 使用整数数组,T可以是Integer,返回类型为List。 但是对于原始数组,T不能是int,因为不能有List<int>

List是一个对象集合,如果你在其中放置对象,它会很有用。 当您尝试使用原始数组创建列表时,JVM非常友好,不会抛出异常,但无法根据需要创建列表。 因此,当您使用Integer数组创建列表时,您会看到输出的差异,这是有效的,并且当您使用int数组创建列表时,该列表在语法上是正确的,但逻辑上违反了集合的原则。

根据这个: Java和C#中的int和Integer有什么区别?

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)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM