4

次のコードブロックを理解するのに問題があります。

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

私の理解では、ループは3回実行され、次のように実行されます。

count = count + count
count = 1 + 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であり、ポストインクリメントは後に発生しますが、その後count0が割り当てられるため、ポストインクリメントは破棄されます。

これは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 に答える