在 Java 和 Eclipse (Kempler) 的最新稳定版本中,输入以下代码并执行它,假设包名和类名存在:
package some_package;
public class what_the_heck {
public static void main(String[] args) {
int p = 2;
int x = 1;
switch(p){
case (1):
x--;
case (2):
x = 2;
case (3):
x = 3;
default:
x++;
}
System.out.println(x);
}
}
这会打印值 4。本来我认为应该打印 2,因为我认为即使没有 break 语句,每段代码仍然保存在 case 语句中。现在我认为问题在于它是如何编译的。例如,我目前的信念是,在内部,布尔值会跟踪 case 语句是否等于该值。如果是,则布尔值为真,所有 case 语句都将被视为真,直到找到中断。这是有道理的,但我仍然想知道这背后是否还有其他原因,或者我的假设是否完全错误。