Arrays
Kurz: Eine feste, typisierte Sammlung von Elementen unter einem gemeinsamen Namen — die Größe steht bei der Erstellung fest und kann danach nicht mehr geändert werden.
Genauer: Deklaration z. B. int[] zahlen = new int[5]; oder direkt mit Werten int[] zahlen = {1, 2, 3};. Der Zugriff erfolgt über einen nullbasierten Index. Wird eine variable Größe gebraucht, greift man in Java stattdessen zu ArrayList aus dem Collections-Framework.
Im Detail
Arrays sind in Java Objekte (auch Arrays primitiver Typen wie int[]) und tragen ihre Länge als öffentliches Feld .length (ohne Klammern, im Gegensatz zu String.length() oder list.size() — eine häufige Verwechslungsquelle für Einsteiger). Der Zugriff auf einen ungültigen Index wirft eine ArrayIndexOutOfBoundsException zur Laufzeit, nicht zur Compile-Zeit:
int[] zahlen = {10, 20, 30};
System.out.println(zahlen.length); // 3
System.out.println(zahlen[0]); // 10
System.out.println(zahlen[3]); // ArrayIndexOutOfBoundsException! Gültig: 0..2
int[] leer = new int[5]; // alle Werte automatisch mit 0 initialisiert
String[] woerter = new String[3]; // alle Werte automatisch mit null initialisiertWeil die Größe fest ist, “wachsen” oder “schrumpfen” kann ein Array nicht — man kann höchstens ein neues, größeres Array erzeugen und die alten Werte mit Arrays.copyOf() hinüberkopieren, was ArrayList intern genau so macht. Arrays sind dafür etwas performanter und speicherschonender als ArrayList, weil sie primitive Werte direkt speichern können (int[] statt List<Integer>, das jeden Wert einzeln als Objekt “boxen” müsste). Faustregel: feste, bekannte Größe und Performance wichtig → Array; Größe ändert sich zur Laufzeit → ArrayList.
Die Klasse java.util.Arrays
Für gängige Array-Operationen liefert Java die Hilfsklasse Arrays mit, statt dass man sie selbst per Schleife schreiben müsste:
int[] zahlen = {5, 3, 8, 1};
Arrays.sort(zahlen); // sortiert in-place: [1, 3, 5, 8]
int pos = Arrays.binarySearch(zahlen, 8); // 3 - nur auf sortierten Arrays gültig
String text = Arrays.toString(zahlen); // "[1, 3, 5, 8]" - für Debugging/println
int[] kopie = Arrays.copyOf(zahlen, 6); // neues Array, Länge 6, Rest mit 0 aufgefüllt
boolean gleich = Arrays.equals(zahlen, kopie); // false - vergleicht Inhalt, nicht ReferenzWichtig: System.out.println(zahlen) allein gibt KEINEN lesbaren Inhalt aus, sondern etwas wie [I@1b6d3586 (Typ + Hash-Code) — Arrays überschreiben toString() nicht, deshalb muss explizit Arrays.toString() genutzt werden.
Arrays als Objekte und Referenztypen
Ein Array-Name ist in Java eine Referenz, kein Wertetyp — wird ein Array an eine Methode übergeben oder einer anderen Variable zugewiesen, teilen sich beide dasselbe zugrundeliegende Array im Speicher:
int[] original = {1, 2, 3};
int[] referenz = original;
referenz[0] = 99;
System.out.println(original[0]); // 99 - dieselbe Array-Instanz, keine Kopie!
int[] echteKopie = original.clone(); // erzeugt eine unabhängige KopieMehrdimensionale und ungleichmäßige Arrays
Java erlaubt auch “Jagged Arrays” (Arrays von Arrays mit unterschiedlicher Länge pro Zeile), da ein mehrdimensionales Array intern nichts anderes ist als ein Array, dessen Elemente selbst wieder Arrays sind — siehe Mehrdimensionale Arrays für Details.
Siehe auch: Index, Mehrdimensionale Arrays, ArrayList, For-Schleife