4

我无法理解以下代码块。

   int count = 0;
   for (int i = 0; i < 3; i++){
       count += (count++);
       System.out.println("count = " + count);
       System.out.println("i = " + i);
   }

我的理解是循环运行三遍,执行以下操作

count = count + count
count = 1 + count

这转换为以下内容,因为 count 最初为 0:

count = 0 + 0
count = 1 + 0 = 1
count = 1 + 1 = 2
count = 1 + 2 = 3
count = 3 + 3 = 6
count = 6 + 1 = 7

输出如下,计数打印为 0。

    count = 0
    i = 0
    count = 0
    i = 1
    count = 0
    i = 2

有人可以向我解释一下吗?谢谢

4

2 回答 2

7

令人困惑的部分是这一行——

count+ = (count++);

这有效地做到了这一点——

count = count + ( count++ );

因此,(count++)等式的值为 0,后增量发生在之后,但随后count被赋值为 0,因此后增量被丢弃。

这种情况发生 3 次。

于 2012-03-19T14:46:54.853 回答
2
count += (count++);

相当于

in tmp = count;      // right hand side of +=
count = count + 1;   // the count++
count = tmp + tmp;   // executing count += tmp

如您所见,count = count + 1没有任何效果,因为 的值count在最后一行被覆盖,如果count最初为 0,那么结果显然是count = 0 + 0:-)

于 2012-03-19T14:47:44.530 回答