开发者社区 问答 正文

为什么Java Arrays.list方法解包Integer数组而不是int数组?

import java.util.Arrays;

int[] ints = {1,2,3,4,5};
List intList = Arrays.asList(ints);
System.out.println(intList.size());
System.out.println(intList.get(0).getClass());

Integer[] integers = {1,2,3,4,5};
List integerList = Arrays.asList(integers);
System.out.println(integerList.size());
System.out.println(integerList.get(0).getClass());

输出

1 class [I 5 class java.lang.Integer java varargs如何asList(T... a)确定何时解压缩数组参数?

展开
收起
被纵养的懒猫 2019-10-08 17:08:07 561 分享 版权
阿里云 AI 助理回答

在Java中,Arrays.asList() 方法可以接受两种类型的参数:基本类型数组和包装类型数组。您的代码示例展示了这两种情况。

  1. 当你传递一个基本类型数组(如 int[] ints)给 Arrays.asList() 时,它不会将数组视为一系列单独的元素添加到列表中,而是将整个数组视为列表中的单个元素。因此,输出显示大小为1,并且通过 get(0).getClass() 显示该元素是一个数组类型(class [I 表示 int[] 类型)。这是因为基本类型数组不能直接转换为泛型集合,因为泛型不支持基本类型。

  2. 相反,当你传递一个包装类型数组(如 Integer[] integers)给 Arrays.asList() 时,它会解压缩数组,将每个元素视为独立的项添加到列表中。所以,输出显示大小为5,且每个元素都是 java.lang.Integer 类型的对象。

至于如何确定 asList(T... a) 方法何时解压缩数组参数,这取决于传递给方法的参数类型:

  • 如果是基本类型数组(如 int[], double[], char[] 等),由于泛型擦除和基本类型不兼容泛型的原因,它会被当作单一对象处理。
  • 如果是引用类型数组或包装类型数组(如 Integer[], String[], Object[] 等),它会被解压缩,数组的每个元素都会被当作单独的参数处理,形成集合中的多个元素。

简而言之,基本类型与引用类型(包括其包装类)在处理上这一差异,导致了 Arrays.asList() 对不同类型的数组参数表现不同。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: