它打印case 10:
的输出但打印x=11
如何?在哪一行之后,它会增加x
int x = 10;
switch (x++) {
case 10:
System.out.println("case 1 ::: "+x);
break;
case 11:
System.out.println("case 2 ::: "+x);
break;
default:
System.out.println("default ::: "+x);
}
输出
case 1 ::: 11
答案 0 :(得分:5)
后增量运算符x++
会增加x
,但会返回之前的x
- 10
值。因此switch
语句获取值10
(这是x++
表达式的值),并执行case 10:
的块,此时System.out.println("case 1 ::: "+x);
打印增加的值x
- 11
。
答案 1 :(得分:1)
您的问题"在哪一行之后它会增加x的值?" 显示您完全错过增量运算符的位置。
立即递增值。在任何语句结束之前,增量不是 deferred 。
E.g。如果x = 10
,则语句y = x++ + x++ + x++
将计算y = 10 + 11 + 12
并生成y = 33
和x = 13
。
相反,语句y = ++x + ++x + ++x
将计算y = 11 + 12 + 13
并生成y = 36
和x = 13
。
如您所见,后递增和前递增运算符将立即影响递增变量的值。区别在于表达式是否使用增量之前(之前)或之后(之后)的值。
有关更复杂的示例,请参阅以下答案:Incrementor logic
答案 2 :(得分:0)
X ++是一种后增量。因此,x(10)的初始值取代于开关,然后只有它才会增加。
这就是为什么你的案例1然后是11
答案 3 :(得分:0)
使用switch
评估x=10
语句与案例1匹配,后增量运算符同时将其值增加1,因此x
变为11
。这就是你得到结果case 1 ::: 11
答案 4 :(得分:0)
在发布增量第一个开关被评估,然后只增加x。 如下......
x = 10;
switch (x++){...}
switch
将首先评估。
案例10:将被选中。 然后只有x
会增加1 (x
变为11)。
然后执行case块中的语句(o / p将== case 1 ::: 11)
//希望你可以通过将它与预增量条件进行比较来更清楚
x = 10;
switch (++x){...}
x
将首先增加。(x
变为11)
然后评估开关条件
案例11:将被选中。
然后执行case块中的语句(o / p将是== case 2 ::: 11)