当赋值运算符的优先级最低时,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
我是 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++
andy=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