Home > Informatik > Begriffe und Konzepte > for-each-Schleifen

for-each-Schleifen

Die for-each-Schleife in Java

Die sogenannte for-each-Schleife ist eine spezielle Form der for-Schleife, die in Java verwendet wird, um die Elemente eines Arrays nacheinander zu durchlaufen.

Die Syntax ist besonders kompakt und eignet sich immer dann, wenn alle Elemente verarbeitet werden sollen und der Index nicht benötigt wird.

Beispiel

Schauen wir uns die Arbeit einer solchen for-each-Schleife einmal an einem einfachen Beispiel an:

int[] zahlen = { 3, 6, 9, 12 };

for (int zahl : zahlen)
{
	System.out.println(zahl);
}

Diese Schleife gibt nacheinander die Werte 3, 6, 9 und 12 aus. Die Laufvariable zahl nimmt bei jedem Schleifendurchlauf automatisch den nächsten Wert aus dem Array an.

Syntax

Nach dem Schlüsselwort "for" kommt in runden Klammern

  1. Deklaration einer lokalen Variablen vom gleichen Datentyp wie die Arrayelemente
  2. Ein Doppelpunkt
  3. Der Name des Arrays

Sie können

for (int zahl: zahlen)

auch folgendermaßen lesen:

"Für jedes Element zahl vom Typ int im Array zahlen mach folgendes: "

Funktionsweise

In unserem Beispiel haben wir es mit einem int-Array zu tun. Daher muss die lokale Schleifenvariabel ebenfalls vom Typ int sein. Der Name dieser Variable ist völlig egal, in dem Beispiel wurde sie einfach "zahl" genannt, während der auszugebende Array "zahlen" heißt.

Auf diese lokale Variable kann nun im Rumpf der for-each-Schleife lesend zugegriffen werden. Das jeweils nächste Arrayelement wird vorübergehend in der lokalen Variablen gespeichert und kann dann beispielsweise mit dem System.out.println()-Befehl ausgegeben werden.

Im nächsten Durchlauf wird dann das nächste Arrayelement in der lokalen Variablen gespeichert.

Eigenschaften der for-each-Schleife
  • Kein Zugriff auf den Index – man kann z. B. nicht auf das vorherige oder nächste Element zugreifen.
  • Einfachere Schreibweise bei rein sequenzieller Verarbeitung, d.h. wenn alle Arrayelement vom ersten bis zum letzten nacheinander ausgegeben oder ausgewertet werden sollen.
  • Nur lesender Zugriff die Arrayelemente möglich.
  • Sind die Arrayelemente Objekte, so kann auf die Methoden der Objekte zugegriffen werden, z. B. kreis.moveHorizontal(10);

Beim letzten Punkt könnte man vielleicht einwenden: Es ist doch nur ein lesender Zugriff auf die Arrayelemente möglich. Eine Methode wie kreis.moveHorizontal(10) verändert doch aber eine Instanzvariable des Objektes, das ist kein lesender Zugriff mehr, sondern ein schreibender.

Der Einwand ist völlig berechtigt. Allerdings ist ein Objekt wie kreiseine Referenzvariable und speichert nicht das eigentliche Objekt, sondern nur die Adresse des Objektes. Und diese Adresse wird beim Zugriff in der for-each-Schleife ja nicht verändert. Das Objekt bleibt an der gleichen Position im Speicher.

Einschränkungen

Die for-each-Schleife ist nicht geeignet, wenn:

  • ein Zugriff auf die Indizes erforderlich ist (z. B. bei Vergleichen von Nachbarelementen wie beim Bubblesort),
  • nur bestimmte Elemente (z. B. mit geraden Indizes) verarbeitet werden sollen,
  • man gezielt Werte im Array ändern möchte (z. B. array[4] = ...).

Quellen:

  1. Lahres et al.: Objektorientierte Programmierung. Rheinwerk Computing 2021.
  2. Barnes, Kölling: Java lernen mit BlueJ - Objects first. Pearson-Verlag 2019.
  3. Ullenboom: Java ist auch eine Insel. Rheinwerk Computing 2023.
  4. Falkenstein: Java für absolute Anfänger. Amazon Deutschland, Jahr nicht angegeben.