为什么在java中“切换”确实检查了比需要更多的情况?

时间:2013-06-07 20:29:17

标签: java switch-statement break

我已经在stackoverflow中搜索了有关问题的原因,为什么在找到匹配的情况后开关不会中断。

例如,我编写了一些模拟骰子的代码。对于每次投掷,我都会因为统计原因而计算(一,...... = int)。

switch (actualThrow) {
case (1): one++; 
case (2): two++; 
case (3): three++; 
case (4): four++;
case (5): five++; 
case (6): six++; 
}

DO 知道,如果我的投掷是3(Why do we need break after case statements?),将检查案例(3)-case(6),并且将通过插入{{来阻止它1}},但我想 理解 ,为什么显然会检查以下情况,但是执行,尽管条件未得到满足。

2 个答案:

答案 0 :(得分:5)

想象一下这种情况:

switch(trafficLight.state) {
    case GREEN:
        car.drive();
        break;
    case YELLOW:
        car.drive();
        break;
    case RED:
        car.stop();
        break;
}

看起来有点浪费,因为GREEN和YELL都做同样的事情。 Java允许我们进行整合,以便多个条件采取相同的操作:

switch(trafficLight.state) {
    case GREEN:
    case YELLOW:
        // Now both GREEN and YELLOW will use this code
        car.drive();
        break;
    case RED:
        car.stop();
        break;
}

代码少,效果相同。就这样。这就是简单的案例,请注意,还有其他方法可以使用不那么明显且更容易被滥用的方法。

答案 1 :(得分:0)

通过switch-case语句进行解析时,每个case只是一个标签。如果有任何匹配的情况,那么它将直到它找到一个中断或语句的结尾(})。

它类似于Java操作码(本质上是汇编代码)。您可以使用标签跳转到。除此之外,它们在代码中并没有真正起作用。