繁体   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