Javaのswitch文

switch文では分岐を指定するためにcaseラベルとdefaultラベルを用います。その多くの場合はcaseで処理すべき値を列挙した上で、一致しない処理を記述するためにdefaultラベルを記述します。この時、defaultラベルを列挙するcaseの間に含めると、default以降のcaseは使われるのでしょうか?

端的に答えを示すと、caseやdefaultは上から順に評価されるのではなく、caseで明示されない値を処理する場合にdefaultが実行されます。

次のコードで検証してみました。第1引数を数値に変換し、switch文に渡します。switch文はcaseで1, 2, 3を指定し、それ以外は2と同じ処理になるよう記述したものです。

$ cat SwitchDefault.java
// vim: tw=0 ts=4 sw=4 sts=4 et

public class SwitchDefault {

    public static void main(String[] args) {
        int index = Integer.parseInt(args[0]);
        switch (index) {
            case 1:
                System.out.println("1");
                break;

            case 2:
            default:
                System.out.println("2");
                return;

            case 3:
                System.out.println("3");
                break;
        }
    }

}

次が実行結果になります。1, 2, 3はcaseで明示しているので、それぞれの処理が実行されます。特に3はdefault以降に存在しますが、正しく処理されて3が表示されています。

$ java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.7.el7_1-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
$ java SwitchDefault 1
1
$ java SwitchDefault 2
2
$ java SwitchDefault 3
3
$ java SwitchDefault 4
2
$ java SwitchDefault 5
2
$ java SwitchDefault 6
2

この挙動については14.11. The switch Statementに記述されています。

defaultラベル以降もcaseを記述することは可能ですが、breakしてswitch文を抜ける場合はdefaultを最後においた方が読みやすくなると思います。


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *