首頁 > Java > java教程 > Java 的 Arrays.asList() 方法對原始陣列有哪些限制和意外行為?

Java 的 Arrays.asList() 方法對原始陣列有哪些限制和意外行為?

Linda Hamilton
發布: 2024-12-21 12:32:09
原創
864 人瀏覽過

What are the Limitations and Unexpected Behaviors of Java's Arrays.asList() Method with Primitive Arrays?

Arrays.asList() 行為與限制

在 Java 中,Arrays.asList() 方法從陣列建立不可修改的清單。它支援可變參數參數,這可以方便地傳遞值數組。但是,將 Arrays.asList() 與原始陣列類型一起使用可能會導致意外結果。

考慮以下程式碼:

float[] floatArray = {1.0f, 2.0f, 3.0f};
List<Float> floatList = Arrays.asList(floatArray); // Works

int[] intArray = {1, 2, 3};
List<Integer> intList = Arrays.asList(intArray); // Incorrect
登入後複製

在第一個範例中,Arrays.asList() 成功建立清單並將浮點值自動裝箱為 Float 物件。但是,在第二個範例中,Arrays.asList(intArray) 產生 List,而不是 List

為什麼會出現意外行為?

Java 泛型不支援原始型別。相反,他們使用 Integer 和 Float 等包裝類別來表示這些值。當使用原始陣列呼叫 Arrays.asList() 時,它會嘗試建立對應包裝類別的清單。然而,由於沒有 List (因為 int 是原始型別),它預設為 List

如何修正它

取得List從使用Arrays.asList() 的int[] 中,您需要先將原始值裝箱到其包裝類別等效項中。這可以使用包裝類別提供的靜態方法來完成,例如 Integer.valueOf()。

intArray = {1, 2, 3};
Integer[] intObjects = new Integer[intArray.length];
for (int i = 0; i < intArray.length; i++) {
    intObjects[i] = Integer.valueOf(intArray[i]);
}
List<Integer> intList = Arrays.asList(intObjects); // Correct
登入後複製

為何自動裝箱不適用於陣列

自動裝箱僅適用於單一基元,不適用於整個陣列。例如,表達式 Integer.valueOf(intArray) 不會將 intArray 的所有元素自動裝箱到 Integer 物件中。相反,它將導致編譯時錯誤。

替代解決方案

或者,您可以使用其他函式庫提供將原始陣列轉換為包裝器清單的方法類別。例如,Guava 函式庫提供了 Ints.asList() 方法,它將原始 int[] 包裝到 List 中。

以上是Java 的 Arrays.asList() 方法對原始陣列有哪些限制和意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板