2 -19 : switch の条件として利用できる型

switch の条件として利用できる型

switch文の条件には通常 int型変数をを利用することが多いと思うが、ここには char, byte, short 型変数も利用できる。ではなぜ long は利用できないか?
実はこれらの型は int 型に変換できるためだ。 switch は引数の条件を int とみなして処理している。そのため long は int に変換することができないため、利用できない。

もちろんlongでも無理をして
long a = 0L;
switch((int)long)
とすれば利用できないこともないが、桁落ちが発生するためどのような結果になるか予想ができない(普通はしない)。

実際の試験では、ソースの上部で
long i = 0;
と定義されていて、長いソースの最後になって
switch(i)
とさりげなく利用されていると、うっかり long型ということを忘れて問題がないと主ってしまうかもしれない。switch文だけ見ても判断がつかないので変数の型もチェックしておく必要がある。

[SwitchVar.java]
/**
* switch の条件として利用できる型 テストクラス
*/
public class SwitchVar {

public static void main(String[] args) {
char varChar = 0;
byte varByte = 0;
short varShort = 0;
int varInt = 0;
long varLong = 0;

// char は可能
switch(varChar) {}

// byte は可能
switch(varByte) {}

// shortは可能
switch(varShort) {}

// intは可能
switch(varInt) {}

// longは不可(コンパイルエラー)
switch(varLong) {}
}
}