【Java】switch文のfall-throughをやさしく解説|breakがないとどうなる?

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

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

理由:

  1. case 2 に一致
  2. break がないので case 3 に流れる
  3. さらに default にも流れる
  4. 最後まで実行される

具体例①: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
decopon

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

moco
moco

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

コメント

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