首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

為什麼 int[] 無法轉換為 Integer[]?

     編輯:程式設計綜合問答

核心原因:數組協變與類型安全

Java 中數組具有 協變性:Sub[] 可賦值給 Super[]。但泛型不具備協變性(List<Sub> 不能賦值給 List<Super>)。

若允許 int[] → Integer[] 會發生什麼?

Integer[] arr = new Integer[10];
Object[] objArr = arr; // 合法,數組協變
objArr[0] = "string"; // 運行時拋 ArrayStoreException

若 int[] 能隱式轉為 Integer[],同樣會破壞類型安全:

int[] primitives = new int[10];
Integer[] boxed = primitives; // 假設允許
boxed[0] = null; // 基本類型數組無法存 null,運行時崩潰

正確轉換方式

  • 基本類型 → 包裝類型:需逐元素裝箱(Java 8+ 可用 Stream:Arrays.stream(primitives).boxed().toArray(Integer[]::new))。
  • 包裝類型 → 基本類型:逐元素拆箱(ArrayUtils.toPrimitive(wrapperArray) 或手動循環)。

結論:int[] 與 Integer[] 在內存佈局、類型系統上本質不同,無隱式轉換。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved