【SWITCH】java中的switch,一直没发现的错误

发布时间 2023-04-27 12:13:41作者: aaacarrot

关于 switch-case 的的使用误区

先看一段代码

Integer bb = 1;
switch (bb){
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
    default:
        System.out.println(3);
}

会打印什么呢?
只打印 1, 还是会打印 123 呢?

答案是:123


我之前,一直会觉得它匹配完了,就过去了,比如说这里,bb 是1,它匹配到1,ok, 没问题,但是到了 case 2 的时候,它不是不匹配了吗,为什么它还是进去了呢?default,不是说只有没有任何一个项不匹配才进default 吗?上面不是明明有匹配到了,它干嘛还进去了? —— (暴露功底虚的事实)

嗯,
看这个结果
其实它是这样子的, switch-case 它从每一个匹配到的项,就开始往下执行,如果没有break 掉,它就会一直一直往下走,之后的每一个 case 无论是否能够匹配,它都会走,直到它遇到一个 beak, 而无论这个break 在接下来的哪个位置,都会退出。
比如下这样:

Integer bb = 1;
switch (bb){
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
        break;
    default:
        System.out.println(3);
}

因为从case1 就命中了,就进入case1 的逻辑,但是因为 case1 的片断没有 break, 所以它会往下继续执行,并且不需要再判断,只要不break,就往下走,于是它就继续打印了2,然而在case2片断,它里面有了一个 break,于是它就跳出去了,就不用再往下执行。于是这个结果是打印 12.





emmmmm。。。。
真的是非常后知后觉啊。
(只能说,好在之前每个 case 都带了 break, 才没至于产生生产事故。。。。害。。)