Java | 基礎文法:switch 文

Java Java
スポンサーリンク

switch 文の全体像

Java の switch 文は「ある値に応じて複数の分岐から一つを選んで実行する」ための構文です。if-else if 連鎖を簡潔に書けるのが特徴で、特に「定数や列挙値に応じた分岐」に向いています。条件は整数型(byte, short, int, char)、列挙型、String、ラッパークラス(Integer など)に対応します。評価は「一致する case を探し、そこから break に出会うまで実行」されます。


基本形と書き方のルール

最小の書式

int day = 3;

switch (day) {
    case 1:
        System.out.println("月曜日");
        break;
    case 2:
        System.out.println("火曜日");
        break;
    case 3:
        System.out.println("水曜日");
        break;
    default:
        System.out.println("その他の日");
}
Java
  • switch (式) の式を評価し、各 case の値と一致するかを調べます。
  • 一致した case から処理が始まり、break に出会うと終了します。
  • どの case にも一致しない場合は default が実行されます。

重要ポイントの深掘り:break と fall-through

break の役割

break を書かないと「次の case へ処理が流れる(fall-through)」という挙動になります。これは意図的に「複数の case をまとめる」場合に使えますが、初心者はまず「各 case に必ず break」を徹底すると安全です。

int num = 2;

switch (num) {
    case 1:
    case 2:
    case 3:
        System.out.println("1〜3のいずれか");
        break;
    default:
        System.out.println("その他");
}
Java

ここでは 1, 2, 3 のいずれでも同じ処理をしたいので、fall-through を活用しています。


重要ポイントの深掘り:型と比較の仕組み

String と enum の対応

Java 7 以降では String を直接 switch に使えます。内部的には equals で比較されます。列挙型(enum)も自然に使え、可読性が高くなります。

String cmd = "start";

switch (cmd) {
    case "start":
        System.out.println("開始します");
        break;
    case "stop":
        System.out.println("停止します");
        break;
    default:
        System.out.println("不明なコマンド");
}
Java
enum Color { RED, GREEN, BLUE }

Color c = Color.GREEN;

switch (c) {
    case RED:
        System.out.println("赤");
        break;
    case GREEN:
        System.out.println("緑");
        break;
    case BLUE:
        System.out.println("青");
        break;
}
Java

重要ポイントの深掘り:switch 式(Java 14+)

Java 14 以降では switch が「式」として使えます。これにより「値を返す分岐」が簡潔に書けます。yield や「矢印構文(→)」を使うのが特徴です。

int day = 3;
String label = switch (day) {
    case 1 -> "月";
    case 2 -> "火";
    case 3 -> "水";
    default -> "その他";
};
System.out.println(label);
Java

この新しい構文では break が不要で、誤って fall-through する心配がありません。値を返す分岐に最適です。


よくある落とし穴と対策

break の書き忘れ

初心者が最も多く遭遇するのは「break を忘れて意図せず次の case まで実行される」バグです。まずは「各 case に必ず break」を習慣にしましょう。

default の抜け漏れ

「どの case にも当てはまらない場合」を必ず設計するため、default を書くのが基本です。仕様上「必ずどれかに当てはまる」場合でも、将来の拡張に備えて default を置くと安心です。

複雑な条件には不向き

switch は「値が一致するかどうか」しか判定できません。範囲判定や複雑な条件は if-else if を使うべきです。


実用例で身につける

例 1: メニュー選択

public class Menu {
    public static void main(String[] args) {
        int choice = 2;
        switch (choice) {
            case 1:
                System.out.println("新規作成");
                break;
            case 2:
                System.out.println("保存");
                break;
            case 3:
                System.out.println("終了");
                break;
            default:
                System.out.println("不明な選択");
        }
    }
}
Java

例 2: 曜日の判定(String)

public class Weekday {
    public static void main(String[] args) {
        String day = "Sunday";
        switch (day) {
            case "Saturday":
            case "Sunday":
                System.out.println("休日");
                break;
            default:
                System.out.println("平日");
        }
    }
}
Java

例 3: 新しい switch 式でラベル生成

public class SwitchExpression {
    public static void main(String[] args) {
        int score = 85;
        String grade = switch (score / 10) {
            case 10, 9 -> "A";
            case 8 -> "B";
            case 7 -> "C";
            case 6 -> "D";
            default -> "F";
        };
        System.out.println("成績: " + grade);
    }
}
Java

設計の指針(重要ポイントのまとめ)

  • switch は「定数や列挙値に応じた分岐」に最適。範囲判定は if-else if を使う。
  • case に必ず break を書き、fall-through は意図的に使うときだけ。
  • default を必ず設計し、想定外の入力を受け止める。
  • Java 14+ の switch 式を使えば、値を返す分岐を簡潔に安全に書ける。

タイトルとURLをコピーしました