如果默认值位于开关盒的中间,则会掉线吗?

时间:2019-01-03 18:40:33

标签: java switch-statement 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); 

与情况6匹配后,增加c的值,因为没有中断,它将恢复为默认值吗?

我确实尝试了这段代码,但它似乎并没有默认设置,也没有发生故障。我只是想知道?

3 个答案:

答案 0 :(得分:0)

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

使用break;不会对案例处于切换状态的位置产生任何影响,这也是default的“案例”

编辑:正如@Ivan所提到的那样,如果故意摔倒,那么案件的位置将很重要

答案 1 :(得分:0)

switch是从匹配casebreakswitch语句的末尾求值的。如果您通过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语句开头的i99,则bc都会增加(发生穿透)。

对于大小写标签default出现的顺序没有限制,仅在switch语句中最多出现一个default