[英]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.