美文网首页
Java Switch语句贯穿问题

Java Switch语句贯穿问题

作者: 谢随安 | 来源:发表于2017-09-30 11:41 被阅读45次
    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。

    相关文章

      网友评论

          本文标题:Java Switch语句贯穿问题

          本文链接:https://www.haomeiwen.com/subject/wsugextx.html