Javaのswitch文とは?決まった値ごとに処理を分ける書き方

最終更新日

Schoo Java入門 初級【2026年版】

本記事は、Schooの「Java入門 初級【2026年版】」第3回「条件分岐・論理演算子」を学んだあとに、決まった値ごとに処理を分けるswitch文の理解を深めたい方向けのステップアップ学習記事です。

ただし、Schooを受講していない方でも、Javaの条件分岐を学び始めたばかりであれば読み進められる内容にしています。初学者がつまずきやすいcasebreakdefaultの役割と、switch式に指定できるデータ型を整理します。

Schoo コースページ:Java入門 初級【2026年版】

switch文は決まった値ごとに処理を分ける

switch文は、1つの値を複数の候補と照らし合わせ、一致した値に対応する処理を実行する条件分岐です。例えば、メニュー番号が1なら新規登録、2ならデータ検索、3なら終了という処理に向いています。

点数が80以上かどうかのような範囲を調べるのではなく、「1と同じ」「2と同じ」という決め打ちの値を扱うことがポイントです。

switch・case・break・defaultの基本形

ファイル名: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        int menuNumber = 2;

        switch (menuNumber) {
            case 1:
                System.out.println("新規登録");
                break;
            case 2:
                System.out.println("データ検索");
                break;
            case 3:
                System.out.println("終了");
                break;
            default:
                System.out.println("該当するメニューがありません");
        }
    }
}

実行結果

データ検索
  • switch (menuNumber):どの値と照らし合わせるかを指定する
  • case 2::値が2と一致した場合の入口を表す
  • break;:switch文の処理を抜ける
  • default::どのcaseにも一致しなかった場合の処理を書く

menuNumberの値は2なので、case 2:から処理を始めます。「データ検索」を表示し、break;でswitch文を抜けます。caseの値の後ろにはセミコロンではなくコロンを付けます。

値とbreakの有無を変えて動きを確認する

メニュー番号とbreakの有無を変更すると、一致したcaseと実行結果がすぐに更新されます。判定するためのボタンはありません。

breakの設定

表示結果

breakを外すと、一致したcaseから下にある処理が続けて実行されます。これをフォールスルーと呼びます。ツールのコード配置ではdefaultが最後にあるため、breakなしでcaseに一致すると、最後のdefaultの処理まで実行される点にも注目してください。

breakを忘れると次のcaseへ進む

ファイル名: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        int menuNumber = 2;

        switch (menuNumber) {
            case 1:
                System.out.println("新規登録");
            case 2:
                System.out.println("データ検索");
            case 3:
                System.out.println("終了");
        }
    }
}

実行結果

データ検索
終了

case 2:から実行を始めても、そこでswitch文は自動的に終わりません。次のcase 3:は新しい条件判定として扱われず、その中の処理も続けて実行されます。1つだけ実行したい場合はbreak;を書きます。

defaultはどのcaseにも一致しない場合に使う

defaultはif文のelseに近い役割です。先ほどの基本コードでmenuNumberを9にすると、1・2・3のどれにも一致しないため、「該当するメニューがありません」と表示されます。

defaultは必須ではありませんが、想定外の値を受け取ったことを明確にできるため、入力値を扱う処理では用意しておくと意図が伝わりやすくなります。この記事では流れを追いやすくするため最後に書きます。

switch式に指定できるデータ型

基本的なswitch文では、次の型をswitch式に指定できます。

種類指定できる型値の例
整数・文字byteshortintchar1'A'
ラッパークラスByteShortIntegerCharacterInteger.valueOf(1)
文字列String"start"
列挙型enum決められた選択肢

ラッパークラスは、対応する基本データ型の値へ自動的に変換されて判定されます。まずは、メニュー番号ならint、コマンド名ならStringと覚えると使い分けやすいでしょう。enumは決められた選択肢を型として表す仕組みで、詳しい定義方法は列挙型を学ぶ段階で扱います。

指定できない主な型

longfloatdoublebooleanは、基本的なswitch文のswitch式には指定できません。小数の範囲や真偽値による分岐にはif文を使います。

エラー例: long型の値をswitch式に指定するとコンパイルエラーになります。

Stringの値でも分岐できる

ファイル名: MainExample.java

public class MainExample {
    public static void main(String[] args) {
        String command = "start";

        switch (command) {
            case "start":
                System.out.println("アプリを開始します");
                break;
            case "stop":
                System.out.println("アプリを停止します");
                break;
            case "help":
                System.out.println("使い方を表示します");
                break;
            default:
                System.out.println("不明なコマンドです");
        }
    }
}

実行結果

アプリを開始します

Stringを使う場合も、switch式の値とcaseの文字列が一致するかを調べます。大文字と小文字は区別されるため、"start""START"は別の値です。

Stringの値がnullの場合

commandnullのままswitch式に指定されると、caseと比較する前にNullPointerExceptionが発生します。外部から受け取る値など、nullの可能性がある場合は、switch文の前にif文で確認します。

Exception in thread "main" java.lang.NullPointerException

if・else ifとswitchの使い分け

判定したい内容向いている書き方
値の大小や範囲ifelse ifscore >= 80
複数の条件の組み合わせifelse ifage >= 18 && hasTicket
1つの値と決まった候補の一致switchメニュー番号が1・2・3

case menuNumber >= 2:のようにcaseへ条件式を書くことはできません。範囲を判定するならif文、同じ変数の決まった値を並べるならswitch文と考えます。どちらでも書ける場合は、処理の意図を読み取りやすい方を選びます。

switch文でよくある間違い

caseの後ろをセミコロンにする

case 1;ではなくcase 1:と書きます。caseの値の後ろはコロン、実行する文とbreakの後ろはセミコロンです。

breakを書き忘れる

1つのcaseだけを実行したいのにbreakを忘れると、下にあるcaseの処理まで実行されます。実行結果が複数行になった場合は、該当するcaseの末尾を確認します。

同じcaseの値を2回書く

同じswitch文の中にcase 1:を2つ書くことはできません。どちらを実行するか決められないため、重複したcaseとしてコンパイルエラーになります。

自分で試す練習

  • 最初のコードのmenuNumberを1、3、9に変えて、実行されるcaseを確認する
  • case 2:break;だけを削除し、実行結果がどう変わるか確認する
  • Stringのコードでcommand"help""START"に変える

確認問題

  1. 整数型の変数dayが1なら「月曜日」、2なら「火曜日」、3なら「水曜日」、それ以外なら「対象外」と表示するswitch文を書いてください。
  2. 文字列型の変数productCode"A"なら「ノートPC」、"B"なら「マウス」、"C"なら「キーボード」、それ以外なら「未登録」と表示してください。
  3. 次の条件を考えます。「scoreが80以上なら合格、80未満なら再挑戦」。switch文とif文のどちらが適していますか。理由も説明してください。
  4. 次のコードでnumberが2の場合、何が表示されますか。breakの役割とあわせて考えてください。
switch (number) {
    case 1:
        System.out.println("A");
    case 2:
        System.out.println("B");
    case 3:
        System.out.println("C");
}

演習後の確認:こちらのページを使って、自分で考えたコードと理由を見直せます。先に答えを書いてから確認してください。

あわせて読みたい関連記事

まとめ

switch文は、1つの値を決まった候補と照らし合わせて処理を分ける書き方です。一致したcaseから処理を始め、breakでswitch文を抜けます。どのcaseにも一致しない場合はdefaultを実行します。

switch式にはintcharStringenumなどを指定できます。一方、値の範囲や複雑な条件にはif・else ifが適しています。条件の種類に応じて、処理の流れを読み取りやすい書き方を選びましょう。

シェアする