加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

为什么java不会将int []转换成Integer []

发布时间:2020-12-14 16:18:27 所属栏目:Java 来源:网络整理
导读:当我做以下事情时, arrayList1 – 包含一个元素,它是一个int []. arrayList2 – not compiling(错误:构造函数ArrayList Integer(List int [])未定义) arrayList3 – 包含7个元素,它们是Integer对象 以下是代码: int[] intArray = new int[]{2,3,4,5,6,7,8}
当我做以下事情时,

> arrayList1 – 包含一个元素,它是一个int [].
> arrayList2 – not compiling(错误:构造函数ArrayList< Integer>(List< int []>)未定义)
> arrayList3 – 包含7个元素,它们是Integer对象

以下是代码:

int[] intArray = new int[]{2,3,4,5,6,7,8};
ArrayList arrayList1 = new ArrayList(Arrays.asList(intArray));
ArrayList<Integer> arrayList2 = new ArrayList<Integer>(Arrays.asList(intArray));

Integer[] integerArray = new Integer[]{2,8};
ArrayList<Integer> arrayList3 = new ArrayList<Integer>(Arrays.asList(integerArray));

题 :
为什么编译器不会将int []中的元素自动复制到整数,并创建一个ArrayList< Integer>?这是什么原因?是我的愚蠢还是其他原因?

解决方法

区别在于int []本身是一个Object,而Integer []是一个引用Integer对象的数组.

Arrays.asList(T...)方法接收某些类型T的变量,没有上限.该方法的擦除是Arrays.asList(Object …).这意味着它将从Object扩展的任何类型的参数的可变数量.

因为int不是Object,而是一个原始类型,所以它不能作为T []的单独元素传递,而int []是一个Object本身,它将作为T []数组的第一个元素(T …内部只是一个T []).然而,Integer []将被传递为T [],每个引用以Integer []作为不同的参数传递给T [].

即使您认为编译器应该已经从int []数组的每个元素到Integer的转换完成,那么对于编译器来说这将是太大的工作.首先需要使用每个数组元素,并将其包装成Integer,然后需要从这些元素内部创建一个Integer [].真的太多了它已经有从int []到Object的直接转换.虽然我一直希望Java允许从int []到Integer []的隐式转换,但是在使用泛型代码时,这将使生活变得更简单,但是这又是如何设计语言的.

举一个简单的例子:

Object[] array = new Integer[10];  // this is valid conversion
Object[] array2 = new int[10];     // this is not
Object obj = new int[10];          // this is again a valid conversion

所以在你的代码中,Arrays.asList(intArray)返回一个ArrayList< int []>而不是ArrayList< Integer>.您不能将其传递给ArrayList< Integer>()构造函数.

有关:

> int[] and Integer[]: What is the difference?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读