答:包括:byte/short/int/char(包括它们的封装类)、enum枚举、Java7 后开始支持 String;
注意事项
1、case 语句中的值的数据类型必须与变量的数据类型相同;
2、case 语句开始执行,直到 break 语句出现才会跳出 switch 语句,匹配到哪一个case就从哪一个位置向下执行,直到遇到了 break 或者整体结束为止;
3、多个 case 后面的数值不可以重复;
4、注意:case 和 deault 语句顺序无所谓;但是当匹配后,无 break 语句,则会从当前位置往后执行,从这里开始遍历了;
/*switch:return 比 break 效果更强,直接退出。示例:枚举调用*/
switch(demo.success.getCode()) {
case 1: System.out.println(1);return;
case 2: System.out.println(2);return;
case 3: System.out.println(3);return;
case 4: System.out.println(4);return;
// default 语句放在第一行也是可以的,效果相同。
default:System.out.println("default");return;
}
问:Java7 后开始支持 String,那么是怎么实现的呢?
答:通过源码和反编译源码分析可以看出来,Java 是通过使用两个 switch 语句实现这个功能的,先通过 hashcode 和 equals 找到指定的 case,然后通过临时的 byte 再执行相应的内容,本质上 swtich 中支持的值还是原来那几种,只是又给你封装了一个方法而已。
// 源码
String str = "one";
switch (str){
case "one" :
System.out.println("one");return;
case "two" :
System.out.println("two");return;
}
// 反编译代码
String str = "one";
byte var4 = -1;
switch(str.hashCode()) {
case 110182:
if (str.equals("one")) {
var4 = 0;
}
break;
case 115276:
if (str.equals("two")) {
var4 = 1;
}
}
switch(var4) {
case 0:
System.out.println("one");
return;
case 1:
System.out.println("two");
return;
default:
}