はじめに
Java の switch 文は便利ですが、
break を忘れると意図しない動作になる ことがあります。
この “意図しない動作” の正体が
fall-through(フォールスルー)。
- break がないとどう動くの?
- なぜ次の case に流れるの?
- default にも流れるの?
こうした疑問を、具体例でスッキリ解消していきます。
まずはコードを確認(break なし)
Java
int n = 2;
switch (n) {
case 1:
System.out.println("One");
case 2:
System.out.println("Two");
case 3:
System.out.println("Three");
default:
System.out.println("Other");
}fall-through の挙動を解説
結論:
一致した case から break に出会うまで、すべて実行される。
n = 2 の場合、実行されるのは:
Two
Three
Other
理由:
- case 2 に一致
- break がないので case 3 に流れる
- さらに default にも流れる
- 最後まで実行される
具体例①:break がないと全部流れる
Java
int n = 1;
switch (n) {
case 1:
System.out.println("A");
case 2:
System.out.println("B");
case 3:
System.out.println("C");
}出力:
A
B
C
case 1 に一致したあと、
break がないため全部実行される。
具体例②:途中に break がある場合
Java
int n = 1;
switch (n) {
case 1:
System.out.println("A");
case 2:
System.out.println("B");
break;
case 3:
System.out.println("C");
}出力:
A
B
case 2 の break で止まるため、
case 3 には流れません。
具体例③:default にも fall-through する
Java
int n = 3;
switch (n) {
case 1:
System.out.println("A");
case 2:
System.out.println("B");
default:
System.out.println("Default");
}出力:
Default
case 3 がないため default から開始し、
break がないので default の中身が実行される。
具体例④:default が途中にあっても同じ
Java
int n = 2;
switch (n) {
case 1:
System.out.println("A");
default:
System.out.println("Default");
case 2:
System.out.println("B");
}出力:
B
- case 2 に一致
- default は無視される(位置は関係ない)
- break がないので case 2 の中だけ実行される
fall-through が役立つケース(意図的に使う)
複数の case をまとめたいとき
Java
switch (day) {
case "SAT":
case "SUN":
System.out.println("Holiday");
break;
}複数の値を同じ処理にまとめられる。
fall-through が危険なケース(実務で多い)
break を書き忘れてバグになる
Java
switch (status) {
case "OK":
handleOk();
case "ERROR":
handleError(); // ← 意図せず実行される
}default に流れて意図しないログが出る
Java
default:
System.out.println("Unknown");実務での安全な書き方
基本は「すべての case に break」
Java
switch (n) {
case 1:
...
break;
case 2:
...
break;
default:
...
break;
}fall-through を使うときはコメントを書く
Java
case 1:
case 2:
// fall-through
handleGroup();
break;読み手に意図が伝わる。
まとめ
fall-through の基本
- break がないと次の case に流れる
- 一致した case から break まで全部実行
- default にも流れる
実務でのポイント
- 基本は break を書く
- fall-through を使うときはコメントを添える
- default の位置はどこでも良いが break は必須

decopon
switch 文の fall-through は、 「break がないと全部流れる」という シンプルなルールを知るだけで一気に理解が深まります。Java Bronze の試験でも、実務のバグ調査でも、 ここを押さえておくと安心して switch を使えます。あなたの学びが、次のステップにつながりますように。

moco
break がないと“すべり落ちる”ように下まで実行されるんだって。
だから switch は、ちょっとした注意が大事なんだよ。

コメント