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("その他の日");
}
Javaswitch (式)の式を評価し、各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("不明なコマンド");
}
Javaenum 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式を使えば、値を返す分岐を簡潔に安全に書ける。
