[英]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
子句都会依次执行。 这种失败是预期的行为。 如果您需要停止此操作,则在每个case
中break
,以便在匹配case
后,它将仅执行该case
,然后从switch
块中中断。
如果您的输入与任何case
块不匹配,则执行default
case。
这是来自官方的javadoc
break 语句是必要的,因为没有它们,switch 块中的语句会失败:匹配 case label 之后的所有语句都按顺序执行,无论后续 case 标签的表达式如何,直到遇到 break 语句。
尝试具有不同i
值的代码,您将亲眼看到switch
的行为方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.