switch-case ersetzt komplizierte Mehrfachverzweigungen

Mit Hilfe einer switch-case-Verzweigung können, ähnlich wie in einer if-else-Verzweigung, Werte überprüft und selektiv Anweisungen ausgeführt werden.

Die Verzweigung kann primitive byte-, short-, char- und int-Werte, jedoch keine long, float oder gar Objekte prüfen. Zudem kann auch auf Enumerations und Strings geprüft werden. Die switch-case-Verzweigung entspricht einer Mehrfachverzweigung mit if.
Der Wert hinter dem switch wird nacheinander mit den hinter der Sprungmarke case aufgeführten Werten verglichen. Bei Übereinstimung wird die jeweilige, dort notierte Anweisung ausgeführt. Trifft keine Übereinstimmung zu, kann optional mit der Sprungmarke default eine Standardanweisung ausgeführt werden.

public class SwitchCaseClass {
    
    public static void main(String[] args){
        int i=2;
        
        switch(i){
        case 0:
            System.out.println("i ist null");
            break;
        case 1:
            System.out.println("i ist eins");
            break;
        case 2:
            System.out.println("i ist zwei");
            break;
        case 3:
            System.out.println("i ist drei");
            break;
        default:
            System.out.println("i liegt nicht zwischen null und drei");
            break;
        }
    }
}

Es ist wichtig darauf zu achten, dass nach Ausführung einer Anweisung der Schleifendurchlauf mit break unterbrochen wird, da die folgenden Sprungmarken sonst ebenfalls geprüft und die dort vorhandenen Anweisungen ggf. ausgeführt werden.
Das letzte break im Quelltext nach dem default-Statement ist nicht zwingend erforderlich, wird jedoch von Oracle empfohlen1, um die Fehleranfälligkeit des Codes zu reduzieren.

Mit der Java-Version 1.7 wurde die Möglichkeit eingeführt, auch auf Strings zu prüfen. Ein Beispiel sieht wie folgt aus:

String s = "Hundefutter";
    switch (s) {
        case "Marmelade":
            System.out.println("Prima zum Frühstück");
            break;
        case "Pizza":
            System.out.println("Immer wieder gerne");
            break;
        case "Hundefutter":
            System.out.println("Pfui Teufel");
            break;
        default:
            System.out.println("Keinen Hunger?");
            break;
    }

Mehrere case-Statements können auch gruppiert werden. Dies muss auf die folgende Weise erfolgen, die letztlich mehreren Sprungmarken mit fehlenden Anweisungen entspricht. Man beachte aber den Doppelpunkt nach jedem case-Statement!

int i = 24;
switch (i) {
    case 0:
    case 24:
    case 13:
        System.out.println(i);
        break;
    default:
        break;
}

An dieser Stelle sei auf einen häufigen Fehler hingewiesen:

int i = 24;
switch (i) {
    case i>12:  // Fehler
        System.out.println(i);
        break;
    default:
        break;
}

Bei i>12 handelt es sich um einen boolschen Ausdruck, auf den nicht gefiltert werden kann!

1) https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html