Конструкция типа x = x++;
указывает, что вы, вероятно, неправильно понимаете, что делает оператор ++
:
// original code
int x = 7;
x = x++;
Давайте перепишем это, чтобы сделать то же самое, основываясь на удалении оператора ++
:
// behaves the same as the original code
int x = 7;
int tmp = x; // value of tmp here is 7
x = x + 1; // x temporarily equals 8 (this is the evaluation of ++)
x = tmp; // oops! we overwrote y with 7
Теперь, давайте перепишем его, чтобы сделать (что я думаю), что вы хотели:
// original code
int x = 7;
x++;
Тонкость здесь заключается в том, что оператор ++
изменяет переменную x
, в отличие от такого выражения, как x + x
, которое будет вычислять значение int, но сама переменная x
не изменится.Рассмотрим такую конструкцию, как почтенный цикл for
:
for(int i = 0; i < 10; i++)
{
System.out.println(i);
}
Обратите внимание на i++
там?Это тот же оператор.Мы могли бы переписать этот цикл for
следующим образом:
for(int i = 0; i < 10; i = i + 1)
{
System.out.println(i);
}
Я также рекомендую не использовать оператор ++
в больших выражениях в большинстве случаев.Из-за тонкости , когда изменяет исходную переменную до пост-приращения (++x
и x++
соответственно), очень легко вводить тонкие ошибки, которые трудно отследить.