整型数组和整型数组的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。