EMZETT.
Login

Switch-Statement

Kurz: Eine Kontrollstruktur, die einen Wert gegen mehrere mögliche Fälle prüft und je nach Treffer einen anderen Codeblock ausführt — eine lesbarere Alternative zu einer langen Kette von if…else-Bedingungen.

Genauer: Jeder case-Zweig steht für einen möglichen Wert der geprüften Variable; ein default-Zweig fängt alle nicht abgedeckten Fälle ab. In vielen klassischen Sprachen “fällt” die Ausführung ohne explizites break in den nächsten Zweig durch (Fallthrough) — ein häufiger Anfängerfehler. Modernere Sprachvarianten (z. B. Java ab Version 14) bieten inzwischen auch eine Ausdrucksform ohne dieses Fallthrough-Risiko.

Im Detail

Der klassische Fallthrough-Fallstrick:

switch (tag) {
    case 6:
        System.out.println("Samstag");
    case 7:
        System.out.println("Sonntag");
        break;
    default:
        System.out.println("Werktag");
}
// bei tag == 6 wird AUSGEGEBEN: "Samstag" UND "Sonntag" - obwohl nur
// case 6 zutrifft! Ohne break "fällt" die Ausführung einfach weiter.

Ohne break am Ende jedes case-Zweigs läuft die Ausführung einfach in den NÄCHSTEN Zweig weiter, unabhängig davon, ob dessen Bedingung überhaupt zutrifft — ein Verhalten, das viele andere Kontrollstrukturen (wie if…else) nicht kennen und das deshalb besonders Einsteiger überrascht. Dieses Fallthrough-Verhalten ist manchmal sogar absichtlich gewollt (mehrere case-Werte sollen denselben Code ausführen — dann lässt man bewusst mehrere case-Zeilen ohne break aufeinanderfolgen), aber deutlich häufiger schlicht ein vergessenes break.

Moderne Sprachvarianten begegnen diesem Problem strukturell: Javas neuere “Switch-Expression”-Syntax (ab Version 14) mit -> statt : fällt standardmäßig NICHT mehr durch:

String ergebnis = switch (tag) {
    case 6, 7 -> "Wochenende";   // mehrere Werte, EIN Zweig, kein Fallthrough
    default -> "Werktag";
};

Ein Switch-Statement lohnt sich vor allem, wenn eine EINZELNE Variable gegen mehrere feste, bekannte Werte geprüft wird — bei komplexeren Bedingungen (mehrere Variablen, Bereichsprüfungen wie “zwischen 10 und 20”) ist eine if...else-Kette meist weiterhin die klarere Wahl, weil switch in den meisten Sprachen nur exakte Gleichheitsvergleiche unterstützt.

Siehe auch: if…else, Break/Continue