次のコード、何が出力されるでしょう?
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でループ自体の終了を指示しているのかが明確になります。
