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

Gar*_*sen 1 java break switch-statement

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

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

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

不要知道,这种情况下,(3)情况(6)将被检查,如果我的罚球是3(我们为什么需要case语句后打破?),它会通过插入阻止break;,但我想明白了,为什么显然,以下情况似乎被检查,但执行,虽然条件没有得到满足.

Chr*_*rle 5

想象一下这种情况:

switch(trafficLight.state) {
    case GREEN:
        car.drive();
        break;
    case YELLOW:
        car.drive();
        break;
    case RED:
        car.stop();
        break;
}
Run Code Online (Sandbox Code Playgroud)

看起来有点浪费,因为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;
}
Run Code Online (Sandbox Code Playgroud)

代码少,效果相同.就这样.这是一个简单的例子,除此之外,还有其他方法可以使用不太明显且更容易被滥用的方法.