天天看點

為什麼switch case語句需要加入break

假設我們有如下這樣一個switch語句:

當我們在執行上面的方法時,如果我們傳入的參數是1,那麼會輸出1、2、3和default,如果傳入的參數是2,那麼會輸出2、3和default,這是為什麼呢?這是因為switch的case語句是用來根據滿足條件從确定的行開始執行的,如果不加入break語句跳出switch邏輯,則會一直往下執行,這也是為什麼上面的測試代碼會出現傳入參數為2時會輸出2、3和default。

為此,我們也可以看一下上面的代碼編譯後的class檔案,通過eclipse打開後,我們可以看到如下内容:

 上面編譯後的語句每行前面的數字是程式的指定序号,我們可以把它簡單的了解為行号,我們可以看到數字為1的那行定義了一個switch指定,其預設會跳到49行,如果傳入的參數是1則跳到28行執行,如果是2則跳到35行執行,如果是3則跳到42行執行。那麼我們先來看程式的第28行到32行,其對應的就是調用System.out.println輸出1,完了後沒有特殊的指令,程式是會繼續順序執行的,也就是會依次執行35、38、直到57行結束。

如果我們把源程式的case語句末端都加上break語句,如下這樣:

 那麼對應的編譯的class檔案通過Eclipse打開後可以看到如下内容:

 我們可以看到switch語句預設會執行58行,如果傳入的參數是1則會執行28行,如果是2則會從38行開始執行,接着我們可以看到28行開始是執行的System.out.println(1)的邏輯,完了後會順序執行到35行,35行的指令是會引導程式執行到第66行,也就是跳出了switch邏輯,對應我們的測試代碼就是程式結束了。這也是為什麼我們在使用switch語句時通常需要在每個case語句結束時加入break指令的原因。