switch文で使えるデータ型

Java Silver

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値は変数なので、コンパイルエラーとなります。

選択肢④は定数であるのでコンパイルエラーにはなりません。

コメント

タイトルとURLをコピーしました