switchを理解する

switch文は一つの値に対してcaseラベルから実行の開始位置を選びます。Java 11のコロン形式を使い、breakの有無、default、選べる型とcase定数の制約を理解します。

この単元で学ぶこと

  • case一致からの実行順を追う
  • breakとフォールスルーを区別する
  • switch対象型とcaseラベルの条件を判定する

本文解説

値で開始位置を選ぶ int n=2;switch(n){case 1:print("A");break;case 2:print("B");break;default:print("D");}はBです。switchは選択式nを評価し、一致するcase 2へ入ります。各caseの値と一致した位置から後の文を実行します。

breakで抜ける break;はこのswitchから抜けて直後の文へ進めます。case 1でAを表示してbreakしなければ、次のcase 2のBも表示します。case 2の値と一致するかを再検査して飛ばすわけではありません。

defaultの役割 どのcaseにも一致しないときはdefaultから開始します。defaultがなければswitch本体を実行せず後へ進みます。defaultは最後に書く習慣がありますが先頭や途中にも置けます。breakがない場合はその後にも流れます。

選べる型 Java 11の従来のswitch文ではbyte、short、char、intとそのラッパー、String、enumを選択式に使えます。long、float、double、booleanは対象外です。ここではJava 11を前提にし、後年のswitch式やパターンマッチは混ぜません。

Stringの照合 String s=new String("go");switch(s){case "go":...}は内容が等しいcaseへ一致します。==で参照を比べるifとは違います。大文字小文字は区別され、"GO"は"go"へ一致しません。nullはdefaultで扱われず例外になります。

caseの定数 caseには1、'A'、"go"等の定数が必要です。final int key=2;は定数式で初期化されていればcase keyに使えます。int key=2;のような普通の変数や、実行時の呼出し結果はcaseとして使えません。

重複と範囲 同じswitchでcase 1を二回書くとエラーです。case 1+1とcase 2も定数値が同じため重複します。byteを選択式にするならcase 128は代入互換の範囲外です。ラベルの見た目でなく、定数値と型を確認します。

選択式の評価は一回 int n=1;switch(n++){case 1:...}は後置式の値1でcaseを選び、その時点でnは2です。switch内でnを変更しても、途中から別caseを選び直すことはありません。選択、実行、終了という順を分けて追います。

図解

一致から終了まで
各caseは独立したif文ではなく、途中から入る文列の入口。

重要ポイント

  • Java 11のswitch文はbyte/short/char/intと対応ラッパー、String、enumを扱う。
  • long・boolean・doubleは選択式に使えない。
  • caseに一致した後はbreak等まで後続文を実行する。
  • caseは互換性のある定数で重複できない。

間違えやすい点

  • caseに一致するたび条件を再判定すると思わない。
  • defaultを常に最後の処理と考えない。
  • nullをdefaultが受けると思わない。

用語解説

caseラベル
値が一致したときに実行を開始する場所を示す記述。
フォールスルー
breakせず後続ラベル側の文へ進む動作。
defaultラベル
一致するcaseがない場合の開始位置。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。