当赋值运算符的优先级最低时,y=x++ 和 y=x-- 有何不同?

How are y=x++ and y=x-- different when the assignment operators has the least priority?

我是 java 的新手。 刚发现在表达中, y=x++,y取x的值,x变为+1。 如果我听起来很愚蠢,请原谅我,但根据 order of precedence,赋值运算符在最后。所以 x++ 不应该首先发生然后是分配。提前致谢。

y=x++ 将 x 的值赋给 y,然后 x 递增。 x++ 操作称为 post 增量。

这里有一些代码,您可以 运行 进行说明:

int x = 0;
System.out.println("Illustration of post-increment");
System.out.println(x);
System.out.println(x++);
System.out.println(x);

int y = 0;
System.out.println("Illustration of pre-increment");
System.out.println(y);
System.out.println(++y);
System.out.println(y);

Q: So isn't x++ supposed to happen first followed by the assignment.

答:是的。这就是发生的事情。语句 y = x++; 等效于以下内容:

temp = x;      // | This is 'x++'
x = x + 1;     // | (note that 'temp' contains the value of 'x++')

y = temp;      // This is the assignment.

但是如您所见,操作顺序(++=)不会影响操作的实际作用。

因此...

Q: How are y=x++ and y=x-- different when the assignment operators has the least priority?

答:不是。

运算符优先级和计算顺序是两个不同的概念,它们没有关系。

如果您有 a() + b() * c(),这并不意味着 b()c() 首先被调用,因为 * 的优先级高于 + . a() 仍然首先被评估。除非另有说明,否则评估顺序通常是从左到右。

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.7