Javaのswitch文の文法と欠点


switch文の文法
switch文の文法例
1 2 3 4 5 6 7 8 9 |
// switch文の文法 switch(判定したい値) { case 定数A: break; case 定数B: break; default: break; } |
プログラムコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 年齢 int age = 33; switch (age) { case 20: System.out.println("年齢は20歳です。"); break; case 33: //←「age」が「33」なので条件に一致 System.out.println("年齢は33歳です。"); break; default: System.out.println("年齢は20歳でも33歳でもありません。"); break; } |
実行結果
1 2 |
// 実行結果 年齢は33歳です。 |
上記例では「age」が「33」の為、該当のcase文の処理が実行されていますね。
defaultの使い方
先ほどの変数「age」に「10」を代入した場合、実行結果は次のとおりになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 年齢 int age = 10; // ←ここを10にしたよ switch (age) { case 20: System.out.println("年齢は20歳です。"); break; case 33: System.out.println("年齢は33歳です。"); break; default: System.out.println("年齢は20歳でも33歳でもありません。"); break; } |
実行結果
1 2 |
// 実行結果 年齢は20歳でも33歳でもありません。 |
default…「case」の条件全てに一致しなかった場合に動作する処理です。
switch文の比較方法応用(Stringやenum)
switch文の応用をみていきましょう。
先ほどは数値の比較をしましたが、文字列や列挙型で比較する方法を解説します。
特に、エンジニアの現場では「enum」の値比較を利用するケースが多いので、こちらの理解が重要です。
switch文の比較方法(文字列)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 年齢 String age = "33"; switch (age) { case "20": System.out.println("年齢は20歳です。"); break; case "33": //←「age」が「33」なので条件に一致 System.out.println("年齢は33歳です。"); break; default: System.out.println("年齢は20歳でも33歳でもありません。"); break; } |
実行結果
1 2 |
// 実行結果 年齢は33歳です。 |
数値の比較と型以外変わらないですね。
switch文の比較方法(enum)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
enum Number { ONE, TWO, THREE, } //列挙型 public static void main(String[] args) { Number number = Number.ONE; switch (number){ case ONE: System.out.println("数字は1です。"); break; case TWO: System.out.println("数字は2です。"); break; default: System.out.println("数字は1でも2でもありません。"); break; } } |
実行結果
1 2 |
// 実行結果 数字は1です。 |
Stringもやenumと比較する際も、基本的な構文は変わらず比較する際の型だけ変えればOKです。
switch文の注意点
ここからは良く間違いやすい例をあげます。ミスしない様に注意しましょう。
間違えやすいプログラム
「break」を付け忘れてしまう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 間違いやすいプログラム例 // 年齢 int age = 33; switch (age) { case 20: System.out.println("年齢は20歳です。"); break; case 33: //←「age」が「33」なので条件に一致 System.out.println("年齢は33歳です。"); //←本来ならここに「break」が必要。 default: System.out.println("年齢は20歳でも33歳でもありません。"); break; } |
実行結果
1 2 3 |
// 実行結果 年齢は33歳です。 年齢は20歳でも33歳でもありません。 |
「break」を付け忘れた場合、後続の「case」や「default」処理が実行されます。
「break」は忘れやすいので要チェック!
Javaのswitch文とif文比較


switchがifより優れている点
「OR条件」のプログラムがある場合、if文よりswitch文の方が綺麗なコードになります。
switch文とif文でコード比較
まずは、if文で書いた場合
1 2 3 4 5 6 7 8 |
//if文で記述 String value = "りんご"; if ("りんご".equals(value) || "ぶどう".equals(value) || "ばなな".equals(value)) { System.out.println("りんごはフルーツです。"); } else { System.out.println(value + "はフルーツはありません。"); } |
次にswitch文で書いた場合
1 2 3 4 5 6 7 8 9 10 11 |
//switch文で記述 switch (value) { case "りんご": case "ぶどう": case "ばなな": System.out.println("りんごはフルーツです。"); break; default: System.out.println(value + "はフルーツはありません。"); break; } |
若干ではありますが、switch文の方が綺麗で読みやすいコードかなと感じるかと思います。後は、内部処理が違う等、、ありますが、難しい話は覚えなくてOKです。
ただ、switch文には重大な欠点があり、使わない方が良いかなと思います。
Javaのswitch文の重大な欠点
結論からいうと「AND条件」が使えない事です。

エンジニアの現場で発生した悲劇ですが、最初は「OR条件」で作られていたプログラムを、途中の仕様変更で「AND条件」が追加されたんですね。
困惑しながら作りなおした経験があるので、同じ事にならない様、注意して貰えたらと思います。
今回は以上です。

Java入門にオススメの書籍2冊【現役エンジニアが厳選選択】
Javaでオススメの資格は「OCJ-P」です【実体験あり】