Инкремент и операторы присваивания в 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++;в цикле) — разницы между формами нет. Она важна только когда значение тут же читают.
Составные операторы присваивания
Когда нужно изменить переменную на произвольную величину, применяют составные операторы. Они короче и читаются лучше.
Запись | Эквивалент |
|
|
|
|
|
|
|
|
|
|
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²