Така конструкція 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++;
достатньо.