增量运算符不会在for循环中递增

我正在做一些关于Java的研究,发现这非常混乱:

for (int i = 0; i < 10; i = i++) { System.err.print("hoo... "); } 

这是永无止境的循环!

有人解释为什么会发生这种事

 for (int i = 0; i < 10; i = i++) { 

上面的循环基本上是一样的: –

 for (int i = 0; i < 10; i = i) { 

你的for语句的第三部分 – i = i++ ,被评估为: –

 int oldValue = i; i = i + 1; i = oldValue; // 3rd Step 

你需要从那里删除作业,使其工作: –

 for (int i = 0; i < 10; i++) { 

(来自评论的OP请求)

x = 1; x = x++ + x++;行为x = 1; x = x++ + x++; x = 1; x = x++ + x++; : –

就评论中指出的问题而言,下列expression式的结果是: –

 x = 1; x = x++ + x++; 

得到如下:

我们来标记第二个陈述的不同部分:

 x = x++ + x++; RAB 

现在,首先对RHS部分(A + B)进行评估,然后将最终结果分配给x 。 所以,我们继续前进。

首先评估: –

 old1 = x; // `old1 becomes 1` x = x + 1; // Increment `x`. `x becomes 2` //x = old1; // This will not be done. As the value has not been assigned back yet. 

现在,由于AR的分配不在这里完成,所以不执行第三步。

现在,转到B评估:

 old2 = x; // old2 becomes 2. (Since `x` is 2, from the evaluation of `A`) x = x + 1; // increment `x`. `x becomes 3`. // x = old2; // This will again not be done here. 

现在,为了得到x++ + x++的值,我们需要完成我们在评估AB留下的最后一个任务,因为现在是在x中分配的值。 为此,我们需要更换:

 A --> old1 B --> old2 // The last assignment of both the evaluation. (A and B) /** See Break up `x = old1;` towards the end, to understand how it's equivalent to `A = old1; in case of `x = x++`, considering `x++ <==> A` in this case. **/ 

所以, x = x++ + x++变成: –

 x = old1 + old2; = 1 + 2; = 3; // Hence the answer 

分解x = x++的第三部分,看它是如何在x = x++ + x++情况下工作的: –

不知道为什么replace完成为A --> old1而不是x --> old1 ,如x = x++

深入了解x = x++部分,特别是最后一项任务: –

 x = oldValue; 

如果你认为x++A ,那么上面的分配可以分解为以下步骤:

 A = oldValue; x = A; 

现在,对于目前的问题,它是一样的: –

 A = old1; B = old2; x = A + B; 

我希望这个清楚。

您正在使用后增量: i = i++; ,这意味着这样的事情:

 temp = i; i = i + 1; i = temp; 

因为15.14.2后缀增量运算符++ :

后缀增量expression式的值是新值存储之前variables的值。

这就是为什么你有旧的价值。

For循环完成正确:

 for (int i = 0; i < 10; i++) { System.err.print("hoo... "); } 

因为i = i ++

 for (int i = 0; i < 10; i++) { System.err.print("hoo... "); } 

我++会报告我的价值,然后增量。 这也意味着你不需要设置我等于i ++,只需改变

 for (int i = 0; i < 10; i++) {