Java Switch语句

另一种分支方式

对比if


if-else-if依次判断,时间复杂度为O(n)

Sample
1
2
3
4
5
6
String status = "success";
if("success".equals(status)){
//...
}else if("fail".equals(status)){
//...
}

switch形式上稍微简洁点,尤其当分支条件很多时,还有一定的性能提升

Sample
1
2
3
4
5
6
7
8
9
10
11
String status = "success";
switch(status){
case "success":
//...
break;
case "fail":
//...
break;
default:
//...
}

支持选项穿透,一定要注意跳出

原理


本质是一个查找过程,会编译成特殊的字节码

  • 如果case项比较密集,会生成tableswitch指令,类似于用索引访问数组值,复杂度O(1)
  • 如果case项比较稀疏,会生成lookupswitch指令,由于候选项预先排序,进行二分搜索,复杂度O(logn)

支持类型


  • 支持枚举
  • 支持兼容int的类型,比如char,byte,short等,不支持long类型,大概是因为范围太大
  • 支持基本类型的包装类
  • Java7后语法支持字符串