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