Java switch文にbreakはなぜ必要?

Javaに限った話ではないのですが、switch文には、break文が記述されています。

最初見たとき、breakってなぜ必要なのかと思い、調べたことをまとめました。

switch文とは

この記事を読んでいる方は、swtich文の意味を知らない人はいないと思いますが、念の為説明します。

switch文は、ある条件下におけるif文をスッキリ見やすくする条件分岐です。

ある条件は、以下の2つです。

条件1条件式が左辺と右辺で一致するかを比較する式である(変数==値)

条件2比較する値が整数、文字、文字列であること

以上の条件が揃っているif文は、switch文に変えることができます。

if文の別の書き方ということです。

例のようなif文をswtich文で記述することができます。

class Main{
    public static void main(String[] args){
        int num = 1;
        if ( num == 1 ){
            System.out.println("This is No.1");
        }else if ( num == 2 ){
            System.out.println("This is No.2");
        }else if ( num == 3 ){
            System.out.println("This is No.3");
        }else{
            System.out.println("Other than 1 2 3");
        }
    }
}
class Main{
    public static void main(String[] args){
        int num = 1;
        switch ( num ){
            case 1:
                System.out.println("This is No.1");
                break;
            case 2:
                System.out.println("This is No.2");
                break;
            case 3:
                System.out.println("This is No.3");
                break;
            default:
                System.out.println("Other than 1 2 3");
        }
    }
}

冗長なif文をスッキリ見やすくするswitch文ですが、breakという文があります。

if文にはそのような記述はありません。

では、なぜswitchにはbreakが必要なのでしょうか。

breakを外して実行する

上記のコードから8行目のbreakをなくして実行します。

class Main{
    public static void main(String[] args){
        int num = 1;
        switch ( num ){
            case 1:
                System.out.println("This is No.1");
                //break;
            case 2:
                System.out.println("This is No.2");
                break;
            case 3:
                System.out.println("This is No.3");
                break;
            default:
                System.out.println("Other than 1 2 3");
        }
    }
}

実行結果

This is No.1
This is No.2

This is No.1だけが表示されたいところ、This is No.2も表示されました。

これは、一体どういうことでしょうか。

switch文の正体

switch文は、条件に一致するcaseラベルまで処理を移動する命令文です。

break文で、処理を中断すると命令しない限り、移動したcaseラベル以下も実行されてしまうのです。

従って、This is No.1だけ表示したい場合、break文で明示的に処理を中断する必要があったというわけです。

まとめ

switch文は、if文の別の記述方法で、

条件式が左辺と右辺で一致するかを比較する式である(変数==値)かつ比較する値が整数、文字、文字列であるif文のとき、switch文で記述できる。

switch文は、条件に一致するcaseラベルまで処理を移動するだけの命令文。

下にcaseラベルが続く場合、break文を入れて処理を中断させる必要がある。