Einleitung: Warum diese Frage jeden quält, der von Java auf Kotlin umsteigt
\n\nSie haben gerade begonnen, Kotlin nach Java zu lernen, und sind bereits auf die erste Überraschung gestoßen? Sie versuchen, ein String-Array so zu deklarieren, wie Sie es in Java gewohnt sind – String[] names = {"Alice", "Bob"} – und der Kotlin-Compiler gibt einen Fehler aus? Herzlichen Glückwunsch, Sie sind nicht allein. Die Frage "What's the Kotlin equivalent of Java's String[]?" hat auf Stack Overflow tausende Aufrufe gesammelt, und das nicht ohne Grund.
Kotlin ist nicht einfach „Java mit Zucker“. Google positioniert es als modernere, sicherere und prägnantere Sprache. Aber diese Prägnanz verwirrt Anfänger manchmal. In Java ist ein Array ein eingebautes Sprachkonstrukt. In Kotlin hingegen sind Arrays Teil der Standardbibliothek und haben ihre eigenen Tücken.
\n\nIn diesem Artikel werden wir alles besprechen, was Sie über Kotlin String-Arrays wissen müssen. Sie lernen nicht nur das direkte Äquivalent zu String[], sondern auch flexiblere Alternativen, die Ihren Code sauberer und sicherer machen. Los geht's!
1. Das direkte Äquivalent: Array<String>
\n\nDer einfachste und offensichtlichste Weg, String[] in Kotlin zu ersetzen, ist die Verwendung von Array<String>. In Kotlin sind alle Arrays Objekte der Klasse Array<T>, wobei T der Typ der Elemente ist.
Wie deklariert und initialisiert man?
\n\nIn Java schreiben Sie:
\nString[] names = new String[3];\nnames[0] = "Alice";\nnames[1] = "Bob";\nnames[2] = "Charlie";\n\nIn Kotlin sieht das so aus:
\nval names: Array<String> = arrayOfNulls(3)\nnames[0] = "Alice"\nnames[1] = "Bob"\nnames[2] = "Charlie"\n\nEs gibt aber einen viel kürzeren Weg – die Verwendung der Funktion arrayOf():
val names = arrayOf("Alice", "Bob", "Charlie")\n\nDer Kotlin-Compiler leitet den Typ Array<String> selbst ab. Beachten Sie: Anders als in Java gibt es in Kotlin keinen new-Operator zum Erstellen von Arrays. Stattdessen werden Factory-Funktionen verwendet.
Wichtiger Unterschied: Feste Größe
\n\nWie in Java ist die Größe von Array<String> festgelegt. Sie können nach der Erstellung kein neues Element hinzufügen. Wenn Sie versuchen, auf einen Index außerhalb der Länge zuzugreifen, erhalten Sie eine ArrayIndexOutOfBoundsException.
val fruits = arrayOf("Apple", "Banana")\n// fruits[2] = "Cherry" // Fehler! Index außerhalb des gültigen Bereichs\n\n2. Spezialisierte Arrays: Nicht immer Array<String>
\n\nFür primitive Typen (Int, Double, Boolean) bietet Kotlin optimierte Klassen: IntArray, DoubleArray, BooleanArray usw. Diese verwenden kein Autoboxing/Unboxing, was Speicher spart und die Ausführung beschleunigt.
Für Strings gibt es eine solche Optimierung jedoch nicht, da String ein Referenztyp und kein primitiver Typ ist. Daher ist Array<String> die einzige Option, wenn Sie ein Array benötigen.
3. Alternative Nr. 1: List<String> (unveränderliche Liste)
\n\nIn den meisten Fällen benötigen Sie kein Array. In Kotlin wird dringend empfohlen, Listen anstelle von Arrays zu verwenden, wenn Sie nicht mit Low-Level-Code arbeiten (z. B. JNI oder Leistungsoptimierung auf Nanosekunden-Ebene).
\n\nDie Liste List<String> ist eine unveränderliche Sammlung. Sie können weder ihre Größe noch ihre Elemente nach der Erstellung ändern. Dies macht den Code in einer Multithread-Umgebung sicherer.
val namesList: List<String> = listOf("Alice", "Bob", "Charlie")\n// namesList[0] = "Eve" // Fehler! listOf gibt eine unveränderliche Liste zurück\n\nIm Wesentlichen ist listOf das Kotlin-Äquivalent zu Java String[] mit zusätzlichem Schutz. In Java kann ein Array versehentlich geändert werden, wenn es an eine andere Methode übergeben wird. In Kotlin erlaubt List dies nicht.