Switch 語句:省略中斷的危險
在 Java 中,switch 語句提供了一個處理多個 case 選項的便利方法。然而,省略break語句可能會導致微妙的錯誤和意外的行為。 Findbugs 是一種靜態分析工具,它會標記此類事件,並報告一個案例「落入」下一個案例的錯誤。
考慮以下程式碼:
<code class="java">switch(x) { case 0: // code case 1: // code case 2: // code }</code>
Findbugs 特別會在下列情況下引發錯誤:
第二個案例陳述。這是因為,在沒有break語句的情況下,執行目前案例的程式碼後,執行會轉到後續案例。
<code class="java">switch (foo) { case 0: doSomething(); case 1: doSomethingElse(); default: doSomeOtherThing(); }</code>
如果foo 為0,則所有三個函數doSomething、doSomethingElse 和doSomeOtherThing 將按該順序執行。但是,如果 foo 為 1,則僅執行 doSomethingElse 和 doSomeOtherThing。這種行為可能無法反映預期的邏輯。
<code class="java">switch (foo) { case 0: doSomething(); break; case 1: doSomethingElse(); break; default: doSomeOtherThing(); break; }</code>
在此程式碼中,只有一個函數會被執行依據 foo 的值執行。
<code class="java">switch (foo) { case 0: case 1: doSomething(); break; case 2: doSomethingElse(); break; default: doSomeOtherThing(); break; }</code>
以上是為什麼 Findbugs 會標記 Java Switch 語句中省略的 Break 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!