i = i ++中的操作顺序;

时间:2014-06-03 14:14:50

标签: java operators

了解++ii++之间的区别,下面的例子仍然感到反直觉 有人可以在下面的例子中解释操作和作业的顺序吗?

    int i = 0;
    i = i++;
    System.out.println(i); // 0

即在第二行,为什么i在分配后没有增加?

1 个答案:

答案 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}}的值 之前增量。然后最后一件事是将该值分配给左侧。