2021_03_12_星期五_一道switch题目引发的思考
public class Test02 {
public static void main(String[] args) {
show(0);
show(1);
}
public static void show(int i) {
switch (i) {
default:
i += 2;
case 1:
i += 1;
case 4:
i += 8;
case 2:
i += 4;
}
System.out.println("i=" + i);
}
}
执行顺序:
- show(0);
- default---------------->i=i+2;---------------->i=0+2=2;
- case 1---------------->i=2+1;---------------->i=2+1=3;
- case 4---------------->i=3+8;---------------->i=3+8=11;
- case 2---------------->i=11+4;---------------->i=11+4=15;
- 退出switch结构,输出i的值
- show(1);
- case 1---------------->i=1+1;---------------->i=1+1=2;
- case 4---------------->i=2+8;---------------->i=2+8=10;
- case 2---------------->i=10+4;---------------->i=10+4=14;
-得出的结论:
① switch中首先会计算表达式的值
② 根据表达式的值去匹配case
③ 如果有匹配到的值,进入该case内部并执行相应代码,如果有break,跳出该switch结构
④ 如果有匹配到的值,进入该case内部并执行相应代码,如果没有break,case穿透,直到遇到braek/case执行完毕
⑤ 如果都没有匹配到值,如果没有default语句块,推出switch结构
⑥ 如果都没有匹配到值,但有default语句,则执行default中的语句, 若default没有break/default并未处于switch结构的最后,接着执行余下的case,直到遇到break/case执行完毕
此题中,default语句块在最开始,且并未有符合表达式的值,故执行default语句块,并且因为default语句块没有break语句(相当于穿透),接着执行剩余case,直到遇到break或者case执行完毕;