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を選び直すことはありません。選択、実行、終了という順を分けて追います。
図解
重要ポイント
- Java 11のswitch文はbyte/short/char/intと対応ラッパー、String、enumを扱う。
- long・boolean・doubleは選択式に使えない。
- caseに一致した後はbreak等まで後続文を実行する。
- caseは互換性のある定数で重複できない。
間違えやすい点
- caseに一致するたび条件を再判定すると思わない。
- defaultを常に最後の処理と考えない。
- nullをdefaultが受けると思わない。
用語解説
- caseラベル
- 値が一致したときに実行を開始する場所を示す記述。
- フォールスルー
- breakせず後続ラベル側の文へ進む動作。
- defaultラベル
- 一致するcaseがない場合の開始位置。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。