为什么java不会将int []转换成Integer []
当我做以下事情时,
> arrayList1 – 包含一个元素,它是一个int []. 以下是代码: 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 []本身是一个Object,而Integer []是一个引用Integer对象的数组.
因为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>()构造函数. 有关: > (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |