了解++i
和i++
之间的区别,下面的例子仍然感到反直觉
有人可以在下面的例子中解释操作和作业的顺序吗?
int i = 0;
i = i++;
System.out.println(i); // 0
即在第二行,为什么i
在分配后没有增加?
答案 0 :(得分:13)
看到它的简单方法是这样的:
第1步:您的int i = 0;
行,(当然)执行此操作:
i = 0
然后我们来到i = i++;
行,事情变得有趣。评估=
的右侧,然后将其分配到左侧。因此,让我们看一下i++
的右侧,它有两部分:
第2步:
temporary_holder_for_value = i
读取i
的值并将其存储在临时位置(我期望的虚拟机寄存器之一)。然后i++
的第二部分完成了:
第3步:
i = i + 1
现在我们已经完成了右侧,我们将结果分配到左侧:
第4步:
i = temporary_holder_for_value
关键是最后一步。基本上,首先完成=
的 right 的所有内容,然后将其结果分配到左侧。由于您使用了后期增量(i++
,而不是++i
),因此右侧表达式的结果会使<{1}}的值 之前增量。然后最后一件事是将该值分配给左侧。