平常项目中,很少用switch,一般用if或者策略模式,所以switch很多细节忘了,今年特来补充学习。
面试题如下,计算最后打印的值,没有注意break,上来就回答7,那么就错了。代码执行之后应该可以发现正确答案是17。
经过调试可以发现,如果不写break,如果一旦case相应的值成功,但内部没有break语句,那么将会无条件(不再进行case匹配)的继续向下执行其它case中的语句,直到遇到break;语句* 或者到达switch语句结束。
另外switch不支持long,支持char byte short int 及其对应的包装类,还有jdk5支持枚举,jdk7支持String.
- /**
- * Description: switch问题
- * Created by Hoscen on 2021/3/23 17:53 with IntelliJ IDEA.
- */
- public class SwitchTest {
- public static void main(String[] args) {
- int i = 11,j = 5;
- switch (i/j) {
- case 2: // 匹配上,但无break
- j += 2; // 7
- case 7:
- j += 7; // 14
- case 8:
- j += 1; // 15
- default:
- j += 2; // 17
- break;
- }
- System.out.println(j); // 17
- }
- }
最后其实switch也并没有那么不堪,switch + menu还是很优雅的。