【问题标题】:The difference between int[] and Integer[] and why are they treated differently? [duplicate]int[] 和 Integer[] 之间的区别以及为什么它们被区别对待? [复制]
【发布时间】:2019-02-05 03:08:06
【问题描述】:

我有两段代码,主要关注的是方法Arrays.asList(T... a)
在第一个中我输入了一个Integer[],在第二个中我输入了一个int[],并且 - 这是让我感到困惑的部分,在这两种情况下,生成的List<...> 是不同的:

Integer[] arrayBoxed = new Integer[10];
List<Integer> list = Arrays.asList(arrayBoxed);

它很短,并且没有设置 arrayBoxed 中的任何值,但它可以工作,并产生一个List&lt;Integer&gt;

int[] array = new int[10];
List<int[]> list = Arrays.asList(array);

在这种情况下,出于某种原因,我得到了一个List&lt;int[]&gt;,这是一个非常病态的构造。

这是为什么呢?

问题是,考虑到Arrays.asList 的类似输入,我希望这两个函数输出相同(两个代码段都完全正常)。但是,该方法一次返回List&lt;Integer&gt;,另一次返回List&lt;int[]&gt;

【问题讨论】:

  • 这里有一些可能对您的研究有用的信息 -> stackoverflow.com/questions/18845289/…
  • 你期望得到什么?
  • List list = Arrays.asList(arrayBoxed);在这里,您正在制作一个整数类型的元素列表。列表 列表 = Arrays.asList(array);在这里,您声明了一个类型为“int数组”的元素列表
  • T 不能表示原始类型,因此在T... 的情况下in[] T 不能成为int 并且最接近的可用非原始类型是数组本身。所以List&lt;T&gt; 变成了List&lt;int[]&gt;
  • 看看重复,尤其是这个答案:stackoverflow.com/a/1467940

标签: java arrays boxing


【解决方案1】:

Arrays.asList 采用引用类型数组,而不是原始类型。

所以,当您调用Arrays.asList(int[]) 时,采用的引用类型是int[](数组类型),这就是为什么结果是List&lt;int[]&gt;

Integer 是一个引用类型,这就解释了为什么List&lt;Integer&gt; 是返回类型。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 2011-09-19
    • 2011-03-26
    • 2014-05-30
    • 1970-01-01
    • 2013-07-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多