问题描述
我是 Java 新手。
才发现在表情里,
y=x++
,y 假设 x 的值,x 变为 +1。
如果我听起来很愚蠢,请原谅我,但根据 order of precedence,赋值运算符在最后。所以 x++ 不应该先发生,然后是赋值。提前致谢。
解决方法
问:所以 x++
不应该先发生,然后是分配。
答:是的。这就是发生的事情。语句 y = x++;
等效于以下内容:
temp = x; // | This is 'x++'
x = x + 1; // | (note that 'temp' contains the value of 'x++')
y = temp; // This is the assignment.
但如您所见,操作的顺序(++
和 =
)不会影响操作的实际操作。
因此...
问:当赋值运算符的优先级最低时,y=x++
和 y=x--
有何不同?
A:他们不是。
,y=x++
将 x 的值分配给 y,然后 x 递增。 x++
操作称为后增量。
以下是一些您可以运行以进行说明的代码:
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);
,
运算符优先级和计算顺序是两个不同的概念,它们没有关系。
如果您有 a() + b() * c()
,这并不意味着 b()
和 c()
首先被调用,因为 *
的优先级高于 +
。 a()
仍然首先被评估。除非另有说明,否则评估顺序通常是从左到右。
Java 编程语言保证 运算符似乎以特定的评估顺序进行评估, 即从左到右。
https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.7