Java до и после увеличения - PullRequest
4 голосов
/ 19 марта 2012

У меня возникли проблемы с пониманием следующего блока кода.

   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

Это означает следующее как количествоизначально 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

Может кто-нибудь объяснить это мне?Спасибо

Ответы [ 2 ]

7 голосов
/ 19 марта 2012

Запутанная часть этой строки -

count+ = (count++);

Это эффективно делает это -

count = count + ( count++ );

Таким образом, значение (count++) для уравнения равно 0, после увеличения происходит после, но затем count присваивается 0, поэтому после увеличения отбрасывается.

Это происходит 3 раза.

3 голосов
/ 19 марта 2012
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: -)

...