我有一个问题。在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);
与情况6匹配后,增加c的值,因为没有中断,它将恢复为默认值吗?
我确实尝试了这段代码,但它似乎并没有默认设置,也没有发生故障。我只是想知道?
答案 0 :(得分:0)
当前,您的所有案例都会失败,因为没有案例也没有break;
,因此您的切换有条件地基于i
,因此,如果您想查看每个案例,则需要更改i
。
使用break;
不会对案例处于切换状态的位置产生任何影响,这也是default
的“案例”
编辑:正如@Ivan所提到的那样,如果故意摔倒,那么案件的位置将很重要
答案 1 :(得分:0)
switch
是从匹配case
到break
或switch
语句的末尾求值的。如果您通过6,它将输入6的大小写,并且仅增加1。但是,如果输入7,它将从default
开始,并以两个增量下降到开关的末端。
答案 2 :(得分:0)
除了在switch语句开始时进行的初始测试外,没有对案例标签进行额外的测试。一旦switch语句对i
进行了评估,控制权就会转移到case 6:
标签,因为它与i
相匹配。然后按顺序执行语句,直到switch语句结束或遇到break
语句为止。这意味着仅c
递增。
break
语句只会结束整个switch语句的执行;是否存在break
语句对重新测试switch表达式没有影响,因为重新测试switch表达式都不会发生。
如果您希望输入default
作为案例标签,则i
不得与switch语句 start 处的任何案例标签匹配。如果switch语句开头的i
是99
,则b
和c
都会增加(发生穿透)。
对于大小写标签default
出现的顺序没有限制,仅在switch语句中最多出现一个default
。