Конструкция 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++;достаточно.