Java中的自增运算符行为是怎样的?

5
为什么结果是8而不是9?
按照我的逻辑:
  1. ++x 得到4
  2. 4 + 4 等于8,所以 x = 8
  3. 但在那个语句之后,x 应该因为 x++ 而增加,所以应该是9。
我的逻辑错在哪里了?
int x = 3;
x = x++ + ++x;
System.out.println(x); // Result: 8 
2个回答

21

请注意,表达式从左到右进行求值:

首先x++会将x的值加1并返回先前的值3。

然后++x会将x的值加1并返回新的值5(经过两次递增)。

x = x++ + ++x;
    3   +  5     = 8

然而,即使您将表达式更改为

x = ++x + x++;

你仍然会得到8

x = ++x + x++
     4  +  4   = 8

这次,x的第二个递增操作 (x++) 在将加法结果分配给x后被覆盖。


1
正如这个答案正确地指出的那样,结果强烈依赖于表达式从左到右进行评估的事实,正如Java所保证的那样。一些其他语言(特别是C和C ++)缺乏这种保证,在这种情况下,相同的推理无效。(我知道这只涉及Java,但还是想强调一下) - chi
这样说对吗?:“您应该注意表达式从左到右进行评估” x = x++ + ++x; 3 + 5 = 8 为什么是5?它不应该是4吗? - Adam Ary

1

++x被称为前缀自增,x++被称为后缀自增。x++会给出先前的值,而++x会给出新的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接