基本概念
switch 语句同 if 条件语句的作用一样,都是用来判断条件的。具体形式如下:
switch (key) {
case 1:
//do something...
break;
default:
//do something...
break;
}
需要注意的是:
switch 语句可以处理 int,short,byte,char 类型的值,但是不能处理 long。因为 short,byte,cha r都会转换成 int 进行处理,这一点也可以从生成的字节码看出。
在 JDK 5 中加入枚举 Enum 类型也可以作为 case 值的。
- 在 JDK 7 中加入字符串 String 类型也可以作为 case 值的。
原理分析
switch 语句有两种编译结果:tableswitch、lookupswitch。
1.tableswitch
当 case 中的值连续时,编译成tableswitch。
执行时从 table 数组根据 case 值计算下标来取值,从数组中取到的便是要跳转的行数。
int key = 1;
switch (key) {
case 1:
System.out.println("key is 1");
break;
case 2:
System.out.println("key is 2");
break;
default:
System.out.println("key is null");
break;
}
反编译后如下:
2.lookupswitch
当 case 中的值不连续时,编译成lookupswitch。
执行时需要从头到尾遍历找到 case 对应的代码行。因为 case 对应的值不是连续的,如果仍然用表来保存 case 对应的行号,会浪费大量空间。
```java
int key = 1;
switch (key) {
case 1:
System.out.println("key is 1");
break;
case 8:
System.out.println("key is 8");
break;
default:
System.out.println("key is null");
break;
}
“`
反编译后如下: