0

所以我一直被教导在Java中,在表达式中的变量名之后使用增量运算符将执行表达式,然后递增值并在表达式中的变量名之前使用运算符将​​在评估之前执行增量。像这样:

int x = 0;
int y = x++;

执行此操作后,y 应为 0,x 应为 1。在此示例中

int x = 0;
int y = ++x;

应该是 x = 1 和 y = 1。

按照同样的逻辑,下面...

int x = 0;
int y = 0;
x = y++ - y++;

应该输出 0 作为 x 和 2 作为 y 因为 0 - 0 = 0。但是输出是

x = -1
y = 2

为什么是这样?

编辑: y 的值无关紧要。x 将始终等于 -1,y 将(最终)等于 y + 2。

4

4 回答 4

2
int x = 0;
int y = 0;
x = y++ - y++;
x = (0) - (1)
y = 1 ---> 2 // after ++

所以x = -1y = 2

于 2013-10-03T02:31:37.917 回答
0

我被告知,当有一个变量++时,它总是在语句完成之后发生。

不是在语句之​​后,而是在表达式之后。

任何时候你n - (n + 1)都会得到结果-1。在进行分配之前,必须对分配的右侧进行全面评估。

于 2013-10-03T02:58:37.873 回答
0
x = y++ - y++;

等于

int a = 0;
int b = 0;
int c = 0;
a = y++; // 0
b = y++; // 1
c = y;
-1 = a - b;
2 = y;
于 2013-10-03T02:33:35.480 回答
0

看起来你所有的假设都是不正确的。在你的第一种情况下

int x = 0;
int y = x++;

x 为 0,y 为 1,因为 y 取 x 的增量值。同样,对于您的第二种情况,x 为 0,y 为 1。对于您的最后一种情况:

int x = 0;
int y = 0;
x = y++(y is 1 here) - y++(y is 2 now);

所以在这里 y++, 使 y 1 然后你减去这个 1 与另一个增量 y 比使 y 2 在那个点所以 x = 1-2= -1

于 2013-10-03T02:35:01.207 回答