break und switch scheinen alle case-Anweisungen auszuführen

Geben Sie in der neuesten stabilen Version von Java und Eclipse (Kempler) den folgenden Code ein und führen Sie ihn aus, sofern die Paket- und Klassennamen vorhanden sind:

package some_package;

public class what_the_heck {

    public static void main(String[] args) {
        int p = 2;
        int x = 1;
        switch(p){  
            case (1):
                x--;
            case (2):
                x = 2;
            case (3):
                x = 3;
            default:
                x++;
        }
        System.out.println(x);
    }
}

Das gibt den Wert 4 aus. Ursprünglich dachte ich, dass es 2 ausgeben sollte, weil ich dachte, dass jeder Code in einer case-Anweisung enthalten ist, auch wenn es keine break-Anweisungen gibt. Jetzt denke ich, dass das Problem darin liegt, wie es kompiliert wird. Zum Beispiel glaube ich derzeit, dass ein Boolescher Wert intern festhält, ob eine case-Anweisung gleich dem Wert war oder nicht. Wenn ja, dann ist der Boolesche Wert wahr undAlle case-Aussagen werden als wahr behandelt bis eine Pause gefunden wird. Das ist sinnvoll, aber ich frage mich immer noch, ob es andere Gründe dafür gibt oder ob ich mich in meiner Annahme völlig irre.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage