int[] 和 Integer[] 之间的区别以及为什么对它们进行不同的处理?
The difference between int[] and Integer[] and why are they treated differently?
我有两段代码,主要关注的是方法Arrays.asList(T... a)
。
在第一个中我输入了一个 Integer[]
,在第二个中我输入了一个 int[]
,并且 - 这是让我感到困惑的部分,在这两种情况下,结果 List<...>
是不同的:
Integer[] arrayBoxed = new Integer[10];
List<Integer> list = Arrays.asList(arrayBoxed);
它很短,并且设置了 arrayBoxed 中的 none 个值,但它有效,并生成 List<Integer>
.
int[] array = new int[10];
List<int[]> list = Arrays.asList(array);
在这种情况下,出于某种原因,我得到了一个 List<int[]>
,这是一个非常病态的结构。
这是为什么?
问题是,给定 Arrays.asList
的相似输入,我希望这两个函数输出相同的结果(两个代码片段都具有完整的功能)。但是,一次是方法 returns List<Integer>
,另一次是 List<int[]>
.
Arrays.asList
采用引用类型数组,而不是基本类型。
因此,当您调用Arrays.asList(int[])
时,采用的引用类型是int[]
(数组类型),这就是为什么结果是List<int[]>
。
Integer
是引用类型,这就解释了为什么List<Integer>
是return类型。
我有两段代码,主要关注的是方法Arrays.asList(T... a)
。
在第一个中我输入了一个 Integer[]
,在第二个中我输入了一个 int[]
,并且 - 这是让我感到困惑的部分,在这两种情况下,结果 List<...>
是不同的:
Integer[] arrayBoxed = new Integer[10];
List<Integer> list = Arrays.asList(arrayBoxed);
它很短,并且设置了 arrayBoxed 中的 none 个值,但它有效,并生成 List<Integer>
.
int[] array = new int[10];
List<int[]> list = Arrays.asList(array);
在这种情况下,出于某种原因,我得到了一个 List<int[]>
,这是一个非常病态的结构。
这是为什么?
问题是,给定 Arrays.asList
的相似输入,我希望这两个函数输出相同的结果(两个代码片段都具有完整的功能)。但是,一次是方法 returns List<Integer>
,另一次是 List<int[]>
.
Arrays.asList
采用引用类型数组,而不是基本类型。
因此,当您调用Arrays.asList(int[])
时,采用的引用类型是int[]
(数组类型),这就是为什么结果是List<int[]>
。
Integer
是引用类型,这就解释了为什么List<Integer>
是return类型。