订单优先顺序||运营顺序

时间:2014-09-25 21:24:36

标签: java

我正在课堂上处理一些代码并遇到以下问题:

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

我错了请告诉我原因。我有马眼罩。 提前谢谢。

3 个答案:

答案 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==2y保留其递减值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;