Инкремент и декремент
1. Инкремент и декремент: основы

Операции ++ и -- выполняют инкремент и декремент. Операция инкремента увеличивает значение операнда на единицу, а операция декремента - уменьшает значение операнда на единицу. Например, выражение
x = x + 1; с операцией инкремента можно переписать так:
x++; Аналогично следующее выражение:
x = x - 1; равнозначно приведенному ниже выражению
x--; 2. Префиксная и постфиксная форма
Эти операции могут быть записаны в постфиксной форме, когда операция следует за операндом, а также в префиксной форме, когда операция предшествует операнду.
Рассмотрим разницу в использовании префиксного и постфиксного инкремента Java на следующем примере. Разница будет только тогда, когда инкремент используется в другой операции.
Например, при выполнении строки int b = a++; сначала значение из переменной a будет записано в переменную b и только потом произойдет инкремент (постфиксная форма означает после). Поэтому переменной b будет присвоено значение 1. Смотрим на следующую строку - int c = ++a; - в этом случае сначала выполнится инкремент (префиксная форма означает до), а уже потом новое значение из a будет записано в переменную c.
Когда инкремент не участвует в другой операции, например как в строке c++, не имеет значения напишите вы префиксную или постфиксную форму.
public class IncrementDecrement {
public static void main(String[] args) {
int a = 1;
int b = a++;
int c = ++a;
c++;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
} Результат выполнения программы:
a = 3
b = 1
c = 4 3. Декремент: префикс и постфикс
Точно так же работает и декремент. Разница между префиксной и постфиксной формой проявляется только тогда, когда операция участвует в другом выражении. Рассмотрим аналогичный пример с --:
public class DecrementExample {
public static void main(String[] args) {
int a = 5;
int b = a--; // постфикс: сначала b = 5, потом a становится 4
int c = --a; // префикс: сначала a становится 3, потом c = 3
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
} Результат выполнения программы:
a = 3
b = 5
c = 3 Как и в случае с инкрементом: при постфиксной форме a-- сначала используется текущее значение переменной, а уже потом происходит уменьшение; при префиксной форме --a сначала выполняется уменьшение, а затем используется новое значение.
4. Инкремент для типа char
Над переменной типа char тоже можно производить операцию инкремента. При этом инкремент производится над кодом символа. Символы в таблице Unicode размещены по алфавиту, поэтому при выполнении операции инкремента над символьным значением, мы получаем следующий по алфавиту символ:
public class CharInc {
public static void main(String[] args) {
char ch = 'X';
System.out.println("ch содержит " + ch);
ch++; // увеличиваем ch
System.out.println("Новое значение ch: " + ch);
}
} Результат выполнения кода:
ch содержит X
Новое значение ch: Y Часто задаваемые вопросы
В чём разница между префиксным (++a) и постфиксным (a++) инкрементом?
Оба увеличивают значение переменной на единицу — разница только в том, когда это происходит относительно использования значения. Префиксная форма ++a сначала увеличивает переменную, а потом возвращает уже новое значение. Постфиксная форма a++ сначала возвращает текущее значение, а увеличивает переменную уже после. То же правило действует для декремента --a и a--.
Когда разница между префиксной и постфиксной формой важна?
Разница проявляется только тогда, когда операция участвует в другом выражении — например, при присваивании int b = a++; или внутри вызова метода. Если же инкремент стоит отдельной строкой, как a++; или ++a;, результат одинаков, и форма не имеет значения.
Что будет выведено: int a = 1; int b = a++;?
Переменной b будет присвоено значение 1, а a станет равным 2. Это постфиксная форма: сначала текущее значение a (равное 1) записывается в b, и только потом a увеличивается на единицу. Если бы использовалась префиксная форма int b = ++a;, то и a, и b стали бы равны 2.
Можно ли применять инкремент к переменной типа char?
Да. Инкремент применяется к числовому коду символа по таблице Unicode. Поскольку символы в Unicode расположены по порядку, инкремент даёт следующий символ: например, для char ch = 'X'; после ch++ переменная будет содержать 'Y'. Так же работает и декремент, возвращая предыдущий символ.
Презентацию с видео можно скачать на Patreon.
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии