EMZETT.
Login

Switch-Statement

Kurz: Eine Mehrfachverzweigung, die einen Wert gegen mehrere mögliche case-Werte prüft — lesbarer als eine lange Kette von if...else if.

Genauer: Klassische Syntax braucht ein break; am Ende jedes case, sonst läuft die Ausführung in den nächsten Case durch (“Fallthrough”). Neuere Java-Versionen (ab 14) erlauben zusätzlich die kompaktere Pfeil-Syntax case X -> ... ohne Fallthrough-Risiko.

switch (tag) {
    case 1 -> System.out.println("Montag");
    case 2 -> System.out.println("Dienstag");
    default -> System.out.println("Unbekannt");
}

Im Detail

// Klassische Syntax mit Fallthrough-Risiko:
switch (tag) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        System.out.println("Wochentag");
        break; // ohne dieses break würde auch der Fall 6 mitgedruckt
    case 6:
    case 7:
        System.out.println("Wochenende");
        break;
    default:
        System.out.println("Ungültiger Tag");
}
 
// Moderne Pfeil-Syntax (ab Java 14) - kein Fallthrough möglich:
String art = switch (tag) {
    case 1, 2, 3, 4, 5 -> "Wochentag";
    case 6, 7 -> "Wochenende";
    default -> "Ungültiger Tag";
};

Bei der klassischen case X:-Syntax läuft die Ausführung ohne break in den NÄCHSTEN Case weiter durch (“Fallthrough”) — das ist manchmal absichtlich gewollt (wie oben, um mehrere Werte demselben Ergebnis zuzuordnen), meistens aber eine Fehlerquelle, wenn man das break schlicht vergisst. Die neuere Pfeil-Syntax (case X ->) löst dieses Problem strukturell: jeder Case endet automatisch nach seiner Anweisung, ein Fallthrough ist syntaktisch gar nicht mehr möglich. Zusätzlich kann switch in der neuen Form direkt als Ausdruck verwendet werden (siehe art = switch (...) oben) und dabei über yield auch komplexere Blöcke einen Wert zurückgeben lassen.

switch funktioniert mit int/char/Enum-Typen, String (seit Java 7) sowie neueren record/Pattern-Matching-Konstrukten — nicht aber mit double/float/boolean.

Siehe auch: if-Statement, Break/Continue