switch在Java编译器处理的底层实现是使用 int 型 来进行判断的,即使是枚举、String类型,最终也是转变成 int 型。由于 long 型表示范围大于 int 型,因此不支持 long 类型。
例如:
public static int stringSwitch(String ss) {
switch (ss) {
case "ABCDEa123abc":
return 1;
case "ABCDFB123abc":
return 2;
case "helloWorld":
return 3;
default:
return Integer.MAX_VALUE;
}
}
反编译的结果:
public static int stringSwitch(String ss) {
byte var2 = -1;
switch(ss.hashCode()) {
case -1554135584:
if (ss.equals("helloWorld")) {
var2 = 2;
}
break;
case 165374702:
if (ss.equals("ABCDFB123abc")) {
var2 = 1;
} else if (ss.equals("ABCDEa123abc")) {
var2 = 0;
}
}
switch(var2) {
case 0:
return 1;
case 1:
return 2;
case 2:
return 3;
default:
return 2147483647;
}
}