如果默认值在 switch case 的中间,会失败吗?

Fall-through if default is in middle of switch case?

我有一个问题。在 switch 语句中,是否 default 被测试为最后一个,即使它不是最后一个?

如果是这样,在下面的代码片段中:

int i = 6;
int a=0, b=0, c=0;
switch (i) 
{
    case 1: 
    a++; 
    case 2: 
    default: 
    case 3: 
    b++; 
    case 6:
    c++; 
}
System.out.println(a + " " + b + " " + c); 

匹配case 6后,增加c的值,因为没有break,会不会回到default?

我试过这段代码,它似乎没有进入默认状态,也没有发生掉线。我只想知道?

目前,您的所有案例都会失败,因为没有案例也有 break;,您的切换是有条件地基于 i,所以如果您想查看每个案例,您需要更改 i.

使用 break; 不应该对你的案例在你的开关状态中的位置有任何影响,这也是 default

的 "case"

编辑:正如@Ivan 所提到的,如果有意落空,那么您的案例的放置将很重要

switch 是从匹配 casebreakswitch 语句结尾进行评估的。如果您传递 6,它将进入 6 的大小写并且只进行一次递增。但是,如果您输入 7,它将从 default 开始,一直下降到 switch 的末尾,进行两次递增。

除了 switch 语句开头的初始测试之外,没有对 case 标签进行额外测试。一旦 i 被 switch 语句求值,控制转移到 case 6: 标签,因为它匹配 i。然后按顺序执行语句,直到 switch 语句结束,或者直到遇到 break 语句。这意味着只有 c 递增。

一条break语句只会结束整个switch语句的执行; break 语句是否存在对重新测试 switch 表达式没有影响,因为重新测试 switch 表达式不会以任何方式发生。

如果您希望 default 成为输入的 case 标签,则 i 不能匹配 switch 语句的 start 处的任何 case 标签。如果在 switch 语句的开头 i99,则 bc 都会递增(发生 fallthrough)。

对于 default 标签在 case 标签的顺序中出现的位置没有限制,只有在 switch 语句中最多出现一个 default