次のコード、何が出力されるでしょう?
for (int i = 0; i < 3; i++) { switch (i) { case 1: System.out.println("One"); break; default: System.out.println("Default"); } }
出力される内容、正しく予想できますか?「break
ってループを止めるんじゃないの?」と感じた方は、要チェックです!

この記事では、switch
文とループでのbreak
の違いを、スッキリ整理して解説します。
結論:breakは「終わらせる対象」が違う!
Javaにおけるbreak
は、switch文
とループ処理
で登場しますが、役割がまったく違います。
breakの場所 | 目的 | 終わらせる対象 |
---|---|---|
switch文の中 | 他のcaseに行かせない | switch文 の処理だけを終了 |
ループ内(forやwhileなど) | 条件に関係なくループを止める | ループ 全体を終了 |
この違いを押さえることで、コードの動きがはっきり見えてきます!
ステップで確認:具体例で動きを理解しよう
Javaにおけるbreak
には、大きく分けて2つの使い方があります。
switch文
の中で使うbreak
- ループ(
for
やwhile
)の中で使うbreak
どちらも「何かを終了させる」という働きがありますが、実は終了させる対象が違うので混乱しやすいポイントです。
switch文のbreakは「他のcaseに移らない」ため
まず最初に、switch
文の仕組みと、そこで使われるbreak
の役割を理解しましょう。
switch文
では、与えられた式(例えばnum
)の値に応じて、複数のcase
ブロックのどれを実行するかを決めます。break
がないとき、該当のcase
ブロックを実行したあとさらに次のcaseへ処理が流れてしまう(フォールスルー)という性質があります。- そこで、意図しない実行を防ぐために
break
を記述し、実行が終わった時点でswitch
文を抜けるようにします。
int num = 2; switch (num) { case 1: System.out.println("One"); break; // ここでswitchから抜ける case 2: System.out.println("Two"); break; // ここでもswitchから抜ける case 3: System.out.println("Three"); }
num
が2の場合、case 2
のブロックが実行され、"Two"
が出力されて終了break
がなければ、"Three"
までも実行されてしまう可能性あり(フォールスルー)
ここでのbreak
は、「switch文を抜ける」ためのもの。
ループは関係ありません。 ループ全体を止めたいわけではないので、そこを切り離して考えるのがポイントです。
ループのbreakは「ループそのもの」を終了させる
次に、ループ(for
やwhile
)内のbreak
を見てみましょう。こちらは「ループ自体を途中で止める」ために使われます。
- ループの中で条件(例えば
if (i == 3)
など)をチェックする - その条件を満たしたら、
break
を呼び出してループを即終了させる - ループが終了したら、その先の処理(ループの後に書いた処理など)に進む
for (int i = 0; i < 5; i++) { if (i == 3) break; System.out.println(i); } /* 出力結果 0 1 2 ✅ i == 3になった時点でbreakが発動し、ループが終了。 */
switchとループの中に両方あるときは要注意!
それでは、冒頭のクイズに登場したような「ループの中にswitch
がある」ケースを考えてみましょう。
for (int i = 0; i < 3; i++) { switch (i) { case 1: System.out.println("One"); break; default: System.out.println("Default"); } }
出力結果は↓。
Default One Default ✅ switchの中のbreakは、ループを止めるわけではなく、switch文だけを抜けるということがポイントです。
i = 0
のときswitch(0)
→case 1
に合致しない →default
の処理を実行 →"Default"
出力break
がないので次にループ本体を終え、i++
される
i = 1
のときswitch(1)
→case 1
に合致 →System.out.println("One")
実行 →break;
でswitch文
が終了- しかし、ループ自体は続く →
i++
される
i = 2
のときswitch(2)
→case 1
に合致しないのでdefault
→"Default"
出力i++
して次のi < 3
判定がfalseになるとループ終了
つまり、switch
文の中のbreak
は「switch文」だけを抜けるのであり、ループを止めているわけではないということです。これが、switch文
とループ
が両方存在するコードを読むうえで最も大事なポイントです。
まとめ:breakの「対象」を意識しよう
- switch文のbreak
- 「フォールスルーを防ぐ(他のcaseを実行させない)」ために使う
switch
文自体から抜けるだけで、ループは継続する
- ループ(for, while)のbreak
- 「ループ自体を途中で止める」ために使う
- breakに到達したら、ループ全体を終了して次の処理へ移る
こうしてみると、「終わらせる対象」がそれぞれ違うというだけで、役割が全然異なるとわかります。
ラベル付きbreak
Javaでは、switch
文の中で出てくるbreak
は、基本的に「switch
文そのものを抜ける」ためのもの、という整理をしました。そのため、switch
の中でcase "N": break;
と書いたとしても、ループ(for
文やwhile
文など)は続行します。
「指定の条件が来たら、ループ自体をまるごと終了させたい」場合は、ラベル付きbreakを利用します。ラベル付きbreakを使うと、抜けたいループにラベル(名前)を付けて指定できるので、明示的に「このループを抜ける」という処理が書けるようになります。
public class Sample { public static void main(String[] args) { List<String> words = Arrays.asList("A", "B", "C", "D", "E"); // ラベル付きのfor文 outerLoop: for (String word : words) { switch (word) { case "B": // ただスキップしたい場合はcontinue continue outerLoop; case "D": // ループ自体を抜けたい場合はbreakとラベルを指定 break outerLoop; default: // 普通に処理を書く System.out.print(word + " "); } } System.out.println("\n処理終了"); } }
case "B": continue outerLoop;
と書くと、「このラベル付きループの先頭へ戻る」動きになります(つまり、word = "B"
のときは出力しない)。case "D": break outerLoop;
と書くと、「このラベル付きループをまるごと終了」します。
これにより、switch
文のbreak
が単にswitch
の終了を意味するものなのか、ラベル付きbreakでループ自体の終了を指示しているのかが明確になります。