Javaの条件分岐には、if文だけでなく「switch文」があります。
switch文の構文
switch文の構文は以下の通りです。
switch ( 条件式 ) { case 値 : 処理 break; case 値 : 処理 break; case 値 : 処理 break; }
switch文は、[条件式]が返す[値]と一致する[case式]を実行します。
また、この分岐するために使う[値]を[case値]と呼びます。
が、
switch文で使用できる値のデータ型には制限があります。
switch文で使える値のデータ型
switch文で使用できる値のデータ型は大きく分けて以下の3つです。
- int型以下の整数値とそのラッパークラス
- 文字と文字列
- 列挙型
細かく分けると以下のようになります
int型以下の整数値とそのラッパークラス | byte Byte short Short int Integer |
文字と文字列 | char Character String |
列挙型 | enum |
ポイント
long型、float型、double型、boolean型は使用できません。
case値として使用できる値
case値として使用できる値は、次の条件を満たしている必要があります。
- 条件式が返す値と「同じ型」あるいは「互換性がある型」であること
- 定数であるか、コンパイル時に値を決めることができること(変数でないこと)
- nullでないこと
注意点
case値として変数は使用できないですが、定数は使用できます。
一見、変数を使用していてもfinal修飾子が付与されていれば定数となるので、注意が必要がです。
例題
以下の内、コンパイルエラーとなるcase値を選びなさい。 final int NUM = 100; int num = 10; switch (num) { //選択肢① case "10" : System.out.println("A"); break; //選択肢② case 5 + 5 : System.out.println("B"); break; //選択肢③ case num : System.out.println("C"); break; //選択肢④ case NUM : System.out.println("D"); break; }
正解:コンパイルエラーとなるcase値は以下の赤文字です。
final int NUM = 100; int num = 10; switch (num) { //選択肢① case "10" : System.out.println("A"); break; //選択肢② case 5 + 5 : System.out.println("B"); break; //選択肢③ case num : System.out.println("C"); break; //選択肢④ case NUM : System.out.println("D"); break; }
選択肢①のcase値は文字列リテラルの10です。
これは条件式が返す値の型(=int型)と同じ型でも互換性のある型でもないのでコンパイルエラーとなります。
選択肢②のcase値は変数なので、コンパイルエラーとなります。
選択肢④は定数であるのでコンパイルエラーにはなりません。
コメント