Java Switch语句贯穿问题

public class test {
    public static void main(String[] args) {
        int a =5 ;
        switch (a){
            case 4:
                a++;
            case 5:
                a++;
            case 6:
                a++;
            case 7:
                a++;
            case 8:
                a++;
            default:
                System.out.println(a);
        }
    }
}

如果问运行上面代码的输出是什么,大家都知道程序会输出9。


可是如果是这样呢?

public class test {
    public static void main(String[] args) {
        int a =5 ;
        switch (a){
            case 6:
                a++;
            case 5:
                a++;
            case 4:
                a++;
            case 3:
                a++;
            default:
                System.out.println(a);
        }
    }
}

答案是8。


经过Debug调试发现是因为switch语句的case匹配语句只会匹配一次,当匹配成功后,会执行代码直到遇到 break 语句结束,如果写switch语句的时候没有加入break语句,则会发生贯穿问题,继续向下执行代码,直到switch代码块的最后一行(注意不是default)。
为了证明Switch不会执行完default代码块就结束,运行如下代码:

public class test {
    public static void main(String[] args) {
        int a =5 ;
        switch (a){
            case 4:
                a++;
            case 5:
                a++;
            case 6:
                a++;
            case 7:
                a++;
            case 8:
                a++;
            default:
                System.out.println(a);
            case 9:
                System.out.println(a);
        }
    }

那么case 9的代码还会不会执行呢?

答案是会的,运行该程序会输出两行9。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容