1

我已经在 stackoverflow 中搜索了关于这个问题的原因,为什么在找到匹配的案例后 switch 没有中断。

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

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

我知道,如果我的 throw 是 3 (为什么我们需要在 case 语句后中断? ),将检查 case(3)-case(6)并且将通过插入来防止它,但我想了解,为什么显然以下情况似乎被检查,但执行,虽然条件不满足。break;

4

2 回答 2

5

想象一下这个场景:

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

似乎有点浪费,因为 GREEN 和 YELLOW 都做同样的事情。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;
}

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

于 2013-06-07T20:33:14.663 回答
0

通过 switch-case 语句进行解析时,每个 case 都只是一个标签。如果有任何内容与 case 匹配,那么它将一直执行,直到找到中断或语句结束 (a })。

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

于 2013-06-07T20:34:13.323 回答