我正在课堂上处理一些代码并遇到以下问题:
int x 14;
int y 3;
x = x-- % y--'
编译后的结果是 ' x = 2' ' y = 2'
我很难理解这个特定场景的顺序或操作。 我的逻辑基于Oracles Operators Precedence (这里) http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
将得出结论: x =(x = x -1)%(y = y - 1)(因为顺序优先)
因此:x = 13%2
x = 1
y = 2
我错了请告诉我原因。我有马眼罩。 提前谢谢。
答案 0 :(得分:4)
此:
int x = 2;
println(x--);
打印2但将x
留在1.后缀增量和减量在变量之前为您提供值。
此:
int x = 2;
println(--x);
打印1并将x
保留为1.前缀增量和减量在更改变量后为您提供值。
编辑:
如果您在同一个表达式中指定x
,则分配最后发生。
int x = 3;
x = 2*(x--);
x--
的值为3(x
之前的值递减)。因此,在分配之后,x
在这种情况下以值6结束。
所以对你的例子来说:
int x = 14;
int y = 3;
x = x-- % y--;
x--
的值为14(x
之前的值递减)。 y--
的值为3(y
之前的值递减)。因此x
被分配到14%3==2
。 y
保留其递减值2。
答案 1 :(得分:0)
x--
返回x
并在之后减少。
x = 14, y = 3
x = 14 % 3 → 2, (x = x - 1 → 13 is done before the x receive 14 % 3 → 2)
y = y - 1 → 2
--x
减少并返回x
答案 2 :(得分:0)
我认为会发生这种情况:
int temp = (x % y);
x--;
y--;
x = temp;