Java-为什么增量后不更改值?

Java-为什么增量后不更改值?,java,java-8,Java,Java 8,我面临以下代码的问题。下面的代码显示意外的答案 class Testing { public static void main(String args[]) { int y = 2; y = y++; System.out.println(y); //output is 2. It should be 3 right ? } } y的预期值为3,因为它必须先将值指定给y,然后再增加y值 但是y的值是2。原因是什么?有人能给我详细的解释吗?这是因为y=y+

我面临以下代码的问题。下面的代码显示意外的答案

class Testing {
   public static void main(String args[]) {    
    int y = 2;
    y = y++;
    System.out.println(y); //output is 2. It should be 3 right ?
 }
}
y的预期值为3,因为它必须先将值指定给y,然后再增加y值

但是y的值是2。原因是什么?有人能给我详细的解释吗?

这是因为y=y++正在将2的值赋值给y,就在它递增之前。

这里y的值是变化的,但它在变化之前再次赋值给y本身。 所以不要使用

y=y++

只用

y++


它是有效的。

我可以说的一件事是,post增量

y = y++;
在作业完成后完成。如果你想在你能使用它之前做它

y = ++y;

但我想这不是你想知道的。

后增量只是y++;不是y=y++;。还有一个更一般的观点:出于好奇,你从哪里得出的假设,增量应该发生在赋值之后?但是y在执行println时已经增加了。增加的y被忘记了,因为它在内存中被新的y替换了,设置为2。你的意思是正在将2的值赋值给y,就在y递增之后,因为要点是递增的值将被覆盖?递增后的y=y++;是在赋值不太清楚或完全错误后完成的。问题是y++首先缓存y的当前值,然后递增并保留在y中,然后缓存从表达式返回的值,y=…可以使用它来否定先前的递增因为我们存储的是原始值。@Pshemo:这个答案中没有任何不清楚的地方,它完全是错误的,甚至与它试图回答的问题相矛盾…