0

我正在查看 switch 条件语句的代码

char c1=65;
switch(c1){
  case 'A':
    System.out.println("one");
  default:
    System.out.println("two");
  case 'b':
    System.out.println("three");
}

虽然结果是“一二三”,但在调试时我发现它首先进入了案例 A ,这是 A 的 ASCII 值 65 ,但随后它也会执行所有剩余的案例,但如果我放了 break; 然后它出来了,这是否意味着如果我们不放 break 它将继续执行所有案例,请告知。

4

7 回答 7

6

如果你不放break,匹配 case 之后的所有其余 case 将自动执行。控制将在两种情况下脱离开关盒:

1. When it ends.
2. When it finds a break.
于 2012-04-29T06:43:52.877 回答
2

您可以阅读java 语言规范 第 14.11 节。它明确定义了 switch 块的执行方式。

谢谢

于 2012-04-29T06:54:10.457 回答
1

它将继续执行它直到达到中断。 在这里您可以阅读有关 switch 语句的更多信息。

于 2012-04-29T06:44:35.220 回答
1

Break 用于跳转到Switch的末尾,从而完成 switch 语句的执行。

不仅是 Java,它在许多语言中都是相同的。

于 2012-04-29T06:57:56.983 回答
1

@user1351820,您的理解是正确的。

每个 break 语句都会终止封闭的 switch 语句。控制流继续 switch 块之后的第一条语句。break 语句是必要的,因为没有它们,switch 块中的语句会失败All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered.

程序SwitchDemoFallThrough显示 switch 块中的语句会失败。该程序显示对应于整数月份的月份和一年中随后的月份。

从技术上讲,最后的中断不是必需的,因为 flow 不在 switch 语句中。建议使用中断,以便修改代码更容易且不易出错。默认部分处理未由 case 部分之一显式处理的所有值。
参考: docs.oracle

于 2012-04-30T04:53:05.883 回答
1

是的,所有在机加工情况下的剩余情况都将执行。
如果您的匹配案例是最后一个,那么只有匹配案例将执行或匹配案例在匹配案例之上的中间案例将不会执行,但匹配案例以下的案例将与匹配案例一起执行。

char c1=65; switch(c1)
{
   case 'B':
      System.out.println("three");

   default:
      System.out.println("two");

   case 'A':
      System.out.println("one");  
} 

在这种情况下,您的输出将是one.

于 2012-04-30T05:07:26.320 回答
0

是的,case声明落空了。如果您对背景原因感兴趣,这个构造源于 C,它也被称为“带有宏的汇编程序”,这意味着它是一种非常低级的语言。C 中定义的switch语句非常适合优化实现——对要切换的值有一些限制,它只需要两条指令:一条用于查找要跳转的地址的表,另一条用于跳转。跳转后继续执行,没有进一步的干预——因此需要显式地break跳出块。

于 2012-04-29T07:37:26.760 回答