增量运算符如何在开关情况下工作?

时间:2017-05-04 07:18:16

标签: java switch-statement

它打印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

5 个答案:

答案 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 = 33x = 13

相反,语句y = ++x + ++x + ++x将计算y = 11 + 12 + 13并生成y = 36x = 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)