在 java 8 中如何评估第 2 行?

how line 2 is evaluated in java 8?

int f = 1;
f = f++;
System.out.println(f);

post 自增运算符的优先级高于赋值运算符,因此 我假设 f 的值(即 1)用于赋值并且 f 递增然后输出将为 2(因为 f 的值现在为 2) 但是输出是1,但是怎么样?我哪里错了?

我的解释导致以下代码中的正确答案

int f = 1;
int g = f++;
System.out.println(f);

在这种情况下输出为 2。

您不能在计算值之前为变量赋值。因此,您必须首先评估 f++。由于 f++ returns 1,这是分配给 f 的值,它会覆盖 f.

的增量值

您的第二个片段是一个完全不同的场景,因为您将 f++ 的值分配给了不同的变量,所以 f 的增量值不会被覆盖。