编译器如何解释此switch语句?我假设switch语句中的内容是(41),为什么它会转到case 2?
int i = 4;
int j = 2;
switch(i++-j) { //switch is evaluted to be (41)??
case 3: i++; break;
case 1: j++; break;
case 2: j+=2; break;
case 5: i+=2; break;
default: i +=5; break;
}
System.out.println(i); //Prints out 4
System.out.println(j); //Prints out 5
答案 0 :(得分:6)
分解:
i++-j
++
的优先级高于-
,因此:
(i++)-j
++
是后缀增量 - 它会在增量之前计算为i
的值。 i
的初始值为4,因此:
4-j
j
为2
,因此表达式的计算结果为4-2 = 2
。
i
已增加,因此现在具有值5
; j
由switch语句中的代码修改。
答案 1 :(得分:1)
通过初始化
i=4;
j=2;
switch(i++-j) { // Expression evaluates as 4-2 = 2.
// new value for i=5 since i++ executed
case 3: i++; break; // skipped
case 1: j++; break; // skipped
case 2: j+=2; break; // Executed, hence evaluates as 2+2 = 4.
case 5: i+=2; break; // Skipped
default: i +=5; break; // Skipped
}
System.out.println(i); // Prints out 5
System.out.println(j); // Prints out 4
答案 2 :(得分:0)
在切换条件下,表达式的值将为4 - 2 = 2。
然后,在使用该值后,i变为5.
然后,案例2:将被执行,j = 2,j + = 2将是4。
因此,输出将是:
5
4