簡體   English   中英

為什么 switch 會執行(int 類型)不匹配的情況?

[英]Why does switch execute (int type)cases that aren't matched?

我有點疑惑為什么所有的情況都在這里執行,即使是那些如果我在這里刪除 break 語句不匹配的情況:

int i = 0;
    switch ( i ) {
        case 0: System.out.print (i) ;
        case 1: System.out.print (i) ;
        case 2: System.out.print (i) ;
        case 3: System.out.print (i) ;
        default : System.out.print (i) ;
    }

此代碼打印出 i 值的 5 倍。 如果我要在 case 0 之后添加一個中斷,它只會將值打印一次。

閱讀一些書籍中的文檔和 function 描述,我原以為它只會打印匹配的案例。

這是因為它以某種方式被枚舉了嗎? 很抱歉我找不到更好的解釋,而且我已經進行了廣泛的搜索,所以我認為以前有人問過它,我不擅長搜索,或者它太基礎了。

您必須在每次讀取后輸入break命令,才能退出switch

int i = 0;
    switch ( i ) {
        case 0: System.out.print (i) ;
        break ;
        case 1: System.out.print (i) ;
        break ;
        case 2: System.out.print (i) ;
        break ;
        case 3: System.out.print (i) ;
        break ;
        default : System.out.print (i) ;
       break ;
    }

switch進入條件為真的地方,之后,它執行后面的所有代碼行。 沒有break它不會退出並在之后運行以下代碼行。

在 java switch語句中,一旦匹配到一個case ,匹配子句之后的所有case子句都會依次執行。 這種失敗是預期的行為。 如果您需要停止此操作,則在每個casebreak ,以便在匹配case后,它將僅執行該case ,然后從switch塊中中斷。

如果您的輸入與任何case塊不匹配,則執行default case。

這是來自官方的javadoc

break 語句是必要的,因為沒有它們,switch 塊中的語句會失敗:匹配 case label 之后的所有語句都按順序執行,無論后續 case 標簽的表達式如何,直到遇到 break 語句。

嘗試具有不同i值的代碼,您將親眼看到switch的行為方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM