如果默认值在 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
是从匹配 case
到 break
或 switch
语句结尾进行评估的。如果您传递 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 语句的开头 i
是 99
,则 b
和 c
都会递增(发生 fallthrough)。
对于 default
标签在 case 标签的顺序中出现的位置没有限制,只有在 switch 语句中最多出现一个 default
。
我有一个问题。在 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
编辑:正如@Ivan 所提到的,如果有意落空,那么您的案例的放置将很重要
switch
是从匹配 case
到 break
或 switch
语句结尾进行评估的。如果您传递 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 语句的开头 i
是 99
,则 b
和 c
都会递增(发生 fallthrough)。
对于 default
标签在 case 标签的顺序中出现的位置没有限制,只有在 switch 语句中最多出现一个 default
。