Heim >Java >javaLernprogramm >Was sind die Einschränkungen und unerwarteten Verhaltensweisen der Arrays.asList()-Methode von Java mit primitiven Arrays?

Was sind die Einschränkungen und unerwarteten Verhaltensweisen der Arrays.asList()-Methode von Java mit primitiven Arrays?

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 12:32:09866Durchsuche

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

Verhalten und Einschränkungen von Arrays.asList()

In Java erstellt die Methode Arrays.asList() eine nicht veränderbare Liste aus einem Array. Es unterstützt varargs-Argumente, die sich für die Übergabe eines Arrays von Werten eignen. Die Verwendung von Arrays.asList() mit primitiven Array-Typen kann jedoch zu unerwarteten Ergebnissen führen.

Beachten Sie den folgenden Code:

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

Im ersten Beispiel wurde Arrays.asList() erfolgreich erstellt eine Liste und ordnet die Float-Werte automatisch in Float-Objekte ein. Im zweiten Beispiel erzeugt Arrays.asList(intArray) jedoch eine Liste, keine Liste.

Warum das unerwartete Verhalten?

Java-Generika unterstützen keine primitiven Typen. Stattdessen verwenden sie Wrapper-Klassen wie Integer und Float, um diese Werte darzustellen. Wenn Arrays.asList() mit einem primitiven Array aufgerufen wird, versucht es, eine Liste der entsprechenden Wrapper-Klasse zu erstellen. Da es jedoch kein List (da int primitiv ist), wird standardmäßig List verwendet.

So korrigieren Sie es

Um eine List Aus einem int[] mit Arrays.asList() müssen Sie zunächst die Grundwerte in ihre Wrapper-Klassenäquivalente einpacken. Dies kann mithilfe der statischen Methoden erfolgen, die von den Wrapper-Klassen bereitgestellt werden, z. B. 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

Warum Autoboxing für Arrays nicht funktioniert

Autoboxing gilt nur für einzelne Grundelemente, nicht für ganze Arrays. Beispielsweise wird der Ausdruck Integer.valueOf(intArray) nicht automatisch alle Elemente von intArray in Integer-Objekte einpacken. Stattdessen kommt es zu einem Fehler bei der Kompilierung.

Alternative Lösungen

Alternativ können Sie andere Bibliotheken verwenden, die Methoden zum Konvertieren primitiver Arrays in Wrapper-Listen bereitstellen Klassen. Beispielsweise bietet die Guava-Bibliothek die Methode Ints.asList() an, die ein primitives int[] in eine List umschließt.

Das obige ist der detaillierte Inhalt vonWas sind die Einschränkungen und unerwarteten Verhaltensweisen der Arrays.asList()-Methode von Java mit primitiven Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn