Java 增量运算符在开关箱中如何工作?
它从Java 增量运算符在开关箱中如何工作?,java,switch-statement,Java,Switch Statement,它从案例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); } 输出 ca
案例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
递增后运算符
x++
递增x
,但返回先前的x
-10
。因此,switch
语句获取值10
(这是x++
表达式的值),并执行案例10:
的块,此时System.out.println(“案例1:”+x)
打印x
-11
x++是增量后的值。因此,开关的初始值为x(10),然后且仅在此之后递增
这就是为什么在案例1和案例11中,您的问题“在哪一行之后递增x的值?”表明您完全忽略了递增运算符的点
它立即增加值。增量不会延迟到任何语句的结尾
例如,如果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
如您所见,增量后运算符和增量前运算符都会立即影响正在递增的变量的值。区别在于表达式是在增量之前(之前)还是之后(之后)使用值
有关更复杂的示例,请参见此答案:使用与案例1匹配的
x=10
对switch
语句进行求值,并且后增量运算符同时将其值递增1,因此x
变为11
。这就是为什么您会在Post中得到结果案例1:::11
第一个开关求值,然后只增加x。
如下
x = 10;
switch (x++){...}
开关将首先评估
案例10:将被选中则只有x
将增加1(x
变为11)
然后执行case块中的语句(o/p将==case1:::11)
//希望通过与之前的增量条件进行比较,您可能会更清楚
x = 10;
switch (++x){...}
x
将首先递增(x
变为11)
然后对开关条件进行评估
案例11:将被选中
然后执行case块中的语句(o/p将==case2:::11)Increment运算符的工作方式与它在所有其他语句中的工作方式相同。对于switch
语句,它的行为没有什么不同。首先使用x的值,它是10,然后递增,在递增后变成11。。。为了更好地理解read post incrementer和pre incrementer,Java教程中介绍了增量运算符。阅读精细手册。如果它立即增加了x的值,那么为什么选择案例10:?因为表达式使用了before增量值。如果需要后增量值,请使用++x
,而不是x++
。这就是二者之间的区别。因此不使用-->开关(x++)对其求值??这里有一个后增量运算符,它遵循使用后更改的原则。它使用初始值x(即10),并立即将其更新为11。