Java 8 在Java8中如何计算第2行?

Java 8 在Java8中如何计算第2行?,java-8,assignment-operator,post-increment,Java 8,Assignment Operator,Post Increment,增量后运算符的优先级高于赋值运算符,因此 我假设f的值为1用于赋值,f增加,那么输出将为2,因为f的值现在为2 但是输出是1,但是如何呢?我错在哪里 我的解释在下面的代码中得到了正确的答案 int f = 1; f = f++; System.out.println(f); 在这种情况下,输出为2。在计算值之前,不能为变量赋值。因此,必须首先计算f++的值。由于f++返回1,这是分配给f的值,它覆盖了f的增量值 您的第二个代码段是一个完全不同的场景,因为您将f++的值赋给了不同的变量,因此f的

增量后运算符的优先级高于赋值运算符,因此 我假设f的值为1用于赋值,f增加,那么输出将为2,因为f的值现在为2 但是输出是1,但是如何呢?我错在哪里

我的解释在下面的代码中得到了正确的答案

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

在这种情况下,输出为2。

在计算值之前,不能为变量赋值。因此,必须首先计算f++的值。由于f++返回1,这是分配给f的值,它覆盖了f的增量值


您的第二个代码段是一个完全不同的场景,因为您将f++的值赋给了不同的变量,因此f的增量值不会被覆盖。

在计算值之前,您不能将值赋给变量。因此,必须首先计算f++的值。由于f++返回1,这是分配给f的值,它覆盖了f的增量值


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

要获得输出2@Jilson,需要像f=++f一样放入预增量;我说的对吗?@sudhiroja这样行,因为++f将返回2。当然,没有理由将++f或f++的值赋回f。似乎有一个常见的误解“更高优先级”是什么意思。实际上,OP是正确的,因为后增量运算符的优先级高于赋值运算符。但这仅仅意味着它是在赋值之前进行评估的,因此后续赋值将取消其副作用。OP似乎假设增量将发生在赋值之后,但这与优先级规则相矛盾;我说的对吗?@sudhiroja这样行,因为++f将返回2。当然,没有理由将++f或f++的值赋回f。似乎有一个常见的误解“更高优先级”是什么意思。实际上,OP是正确的,因为后增量运算符的优先级高于赋值运算符。但这仅仅意味着它是在赋值之前进行评估的,因此后续赋值将取消其副作用。OP似乎假设增量将发生在赋值之后,但这与优先级规则相矛盾。
int f = 1;
int g = f++;
System.out.println(f);