所以,这个函数的输出是0。 仅当 java 更新“;”之前的整个语句后的值时,才有可能已完成。如果是这样的话,那么等号运算还有什么意义呢? 不应该对应的是,z =x +y-(x+y);
class HelloWorld {
public static void main(String[] args) {
int x = 10;
int y = 20;
int z = x += y -= x += y;
System.out.println(z);
}
}
我运行了代码,这就是我可以推断的。我确实尝试搜索我的推论是否正确,但是我没有找到任何相关内容?
编辑:我的问题是 - 当 x+=y 最终将 x 的值更新为 30 时,为什么我们在接下来的所有表达式中使用 x = 10 的值?
在 Java 中,“首先评估左手操作数”。 这意味着上面的表达式将像这样求解:
int z = (x = x + (y = y - (x = x + y)));
int z = (x = 10 + (y = y - (x = x + y)));
int z = (x = 10 + (y = 20 - (x = x + y)));
int z = (x = 10 + (y = 20 - (x = 10 + 20)));
int z = (x = 10 + (y = 20 - (30)));
x 将变成 30。
int z = (x = 10 + (-10));
x 将变为 30。 y 将变为 -10。
int z = (x = 0);
x 将变为 0。 y 将变为 -10。
int z = 0; z 将变为 0;