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)确定何时解压缩数组参数?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java中,Arrays.asList()
方法可以接受两种类型的参数:基本类型数组和包装类型数组。您的代码示例展示了这两种情况。
当你传递一个基本类型数组(如 int[] ints
)给 Arrays.asList()
时,它不会将数组视为一系列单独的元素添加到列表中,而是将整个数组视为列表中的单个元素。因此,输出显示大小为1,并且通过 get(0).getClass()
显示该元素是一个数组类型(class [I
表示 int[]
类型)。这是因为基本类型数组不能直接转换为泛型集合,因为泛型不支持基本类型。
相反,当你传递一个包装类型数组(如 Integer[] integers
)给 Arrays.asList()
时,它会解压缩数组,将每个元素视为独立的项添加到列表中。所以,输出显示大小为5,且每个元素都是 java.lang.Integer
类型的对象。
至于如何确定 asList(T... a)
方法何时解压缩数组参数,这取决于传递给方法的参数类型:
int[]
, double[]
, char[]
等),由于泛型擦除和基本类型不兼容泛型的原因,它会被当作单一对象处理。Integer[]
, String[]
, Object[]
等),它会被解压缩,数组的每个元素都会被当作单独的参数处理,形成集合中的多个元素。简而言之,基本类型与引用类型(包括其包装类)在处理上这一差异,导致了 Arrays.asList()
对不同类型的数组参数表现不同。