Bei der Ausführung von switch wird geprüft, ob es eine zum Wert des Selektors passende Marke gibt. Ist das der Fall, so wird an die entsprechende
Marke gesprungen, und alle restlichen Anweisungen der switch-Anweisung
werden ausgeführt. Die Ausführung wird hierbei auch über die folgenden
Marken hinweg fortgesetzt.
Aus diesem Grund erzeugt die folgende switch-Anweisung
int x = 4;
switch(x) {
case 3:
System.out.println("Drei");
case 4:
System.out.println("Vier");
case 5:
System.out.println("Fünf");
default:
System.out.println("was anderes");
}
die Ausgabe
Vier
Fünf
was anderes
Meistens ist es aber der Fall, dass man nur die Anweisungen ab
einer Marke bis zur nächsten Marke ausführen will. Hierzu muss man die Ausführung der switch-Anweisung explizit mit der Anweisung break beenden.
Dies ist ein wesentlicher Unterschied zu der case-Anweisung in Pascal oder ADA, in der ausschließlich die Anweisungen ausgeführt werden, die zu einer
bestimmten Fallbehandlung gehören und die danach beendet wird.
Die obige switch-Anweisung muss daher folgendermaßen abgeändert werden,
um das gewünschte Verhalten zu erzielen:
switch(x) {
case 3:
System.out.println("Drei");
break;
case 4:
System.out.println("Vier");
break;
case 5:
System.out.println("Fünf");
break;
default:
System.out.println("was anderes");
}
Es ist auch zulässig, mehrere Marken hintereinander anzugeben:
switch(x) {
case 5:
case 6:
System.out.println("Fünf oder Sechs");
...
}
Die Notwendigkeit, break explizit anzugeben, wenn eine
Entweder-Oder-Fallbehandlung gewünscht wird, bringt zwar eine gewisse
Fehlerträchtigkeit mit sich, andererseits lässt sich switch
dadurch flexibler einsetzen. Außerdem
kann dem versehentlichen Fehlen von break-Anweisungen durch eine Prüfung des Compilers vorgebeugt werden. Seit Version 1.4 verfügt javac über die Option -Xswitchcheck, mit der Warnungen bei fehlenden break-Anweisungen innerhalb eines switch gegeben werden.