Инкремент и операторы присваивания в Java

Разберём операторы инкремента и декремента (++ и --), разницу префиксной и постфиксной формы, и составные операторы присваивания += -= *= /=.

Увеличить или уменьшить переменную на единицу — настолько частая операция, что для неё придумали отдельные операторы: ++ (инкремент) и -- (декремент).

Инкремент и декремент

int count = 5;
count++;                       // то же, что count = count + 1
System.out.println(count);     // 6

count--;                       // то же, что count = count - 1
System.out.println(count);     // 5

Вывод:

6
5

Префиксная и постфиксная форма

Оператор можно поставить до переменной (++x, префиксная форма) или после (x++, постфиксная). Сама переменная в обоих случаях увеличится, но значение всего выражения различается:

  • ++x — сначала увеличивает, потом возвращает новое значение.
  • x++ — возвращает старое значение, и только потом увеличивает.
int a = 5;
int b = a++;        // b получит 5 (старое), затем a станет 6
System.out.println("a = " + a + ", b = " + b);

int c = 5;
int d = ++c;        // c станет 6, затем d получит 6 (новое)
System.out.println("c = " + c + ", d = " + d);

Вывод:

a = 6, b = 5
c = 6, d = 6

Если результат инкремента не используется в выражении (просто i++; в цикле) — разницы между формами нет. Она важна только когда значение тут же читают.

Составные операторы присваивания

Когда нужно изменить переменную на произвольную величину, применяют составные операторы. Они короче и читаются лучше.

Запись

Эквивалент

x += 3

x = x + 3

x -= 3

x = x - 3

x *= 3

x = x * 3

x /= 3

x = x / 3

x %= 3

x = x % 3

int score = 10;
score += 5;     // 15
score *= 2;     // 30
score -= 4;     // 26
System.out.println(score);

Вывод:

26

Коротко

  • ++ и -- увеличивают/уменьшают переменную на единицу.
  • x++ возвращает старое значение, ++x — новое; вне выражения разницы нет.
  • Составные операторы += -= *= /= %= сокращают изменение переменной.
Проверьте себя
1. int a = 5; int b = a++; Чему равны a и b?
Aa=5, b=5
Ba=6, b=5
Ca=6, b=6
Da=5, b=6
2. Чем отличается ++x от x++?
AНичем
B++x возвращает новое значение, x++ — старое
Cx++ возвращает новое, ++x — старое
D++x работает только в циклах
3. Чему эквивалентна запись score *= 2?
Ascore = score + 2
Bscore = score * 2
Cscore = 2
Dscore = score²