Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整型数组和整型数组的containsAll行为差异(Java)_Java_Collections_Wrapper_Primitive - Fatal编程技术网

整型数组和整型数组的containsAll行为差异(Java)

整型数组和整型数组的containsAll行为差异(Java),java,collections,wrapper,primitive,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)); Integer[]arr1={1,2,3,4,5}; 集合编号=Arrays.asList(新整数[]{1,2,3}); System.out.pri

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

Integer[] arr1 = {1,2,3,4,5};
Collection<?> numbers = Arrays.asList(new Integer[]{1,2,3});
System.out.println(Arrays.asList(arr1).containsAll(numbers));
Integer[]arr1={1,2,3,4,5};
集合编号=Arrays.asList(新整数[]{1,2,3});
System.out.println(Arrays.asList(arr1).containsAll(number));
打印“true”,如果我们将整数转换为int,如下所示:

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[]arr2={1,2,3,4,5};
Collection numbers2=Arrays.asList(新的int[]{1,2,3});
System.out.println(Arrays.asList(arr2).containsAll(numbers2));

是否打印“false”?

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

asList()方法接受类型为T的变量参数列表,并返回一个
列表
。对于整数数组,T可以是整数,返回类型为List。但是对于基元数组,T不能是int,因为不能有一个
列表

,根据这一点:

Integer是一个对象,int是一个原语,尽管它们不直接相同

因此,在Java文档中,Collection.containsAll(Object o)需要一个对象,而不是一个原语。 也许这解释了不同之处


我以前不知道这一点,非常感谢您的提问。

列表是对象的集合,如果您将对象放入其中,效果会非常好。当您试图使用原语数组创建列表时,JVM非常友好,不会抛出异常,但它无法按照您的要求创建列表。因此,当你用整数数组创建一个列表时,你会看到输出上的差异,这是有效的,当你用整数数组创建一个列表时,这在语法上是正确的,但在逻辑上违反了集合的原则。

我还想指出,在第二种情况下,即使在替换较小的数组{1,2,3}后,仍然会出现错误使用{1,2,3,4,5},只有当两个列表中的数组通过引用比较(即“==”)相同时才为true。