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);
        }
    }
}

如果問運(yùn)行上面代碼的輸出是什么,大家都知道程序會(huì)輸出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。


經(jīng)過Debug調(diào)試發(fā)現(xiàn)是因?yàn)閟witch語句的case匹配語句只會(huì)匹配一次,當(dāng)匹配成功后,會(huì)執(zhí)行代碼直到遇到 break 語句結(jié)束,如果寫switch語句的時(shí)候沒有加入break語句,則會(huì)發(fā)生貫穿問題,繼續(xù)向下執(zhí)行代碼,直到switch代碼塊的最后一行(注意不是default)。
為了證明Switch不會(huì)執(zhí)行完default代碼塊就結(jié)束,運(yùn)行如下代碼:

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的代碼還會(huì)不會(huì)執(zhí)行呢?

答案是會(huì)的,運(yùn)行該程序會(huì)輸出兩行9。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容