Конструкция like 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++
, соответственно), очень легко вводить тонкие ошибки, которые трудно отследить.
int x = 7; x = ++x;
конечно, все еще ужасный код, вам не нужно переназначать.int x = 7; x++;
достаточно.