You are here: Home » Учебник » Операторы инкремента и декремента

Операторы инкремента и декремента

Ключевой момент: оператор инкремента (увеличения) (++) и оператор декремента (уменьшения) (--) предназначены для увеличения и уменьшения переменной на 1.

Два сокращённых оператора ++ и -- используются для прибавления или вычитания единицы. Это удобно, потому что часто во многих задачах программирования необходимо изменить значение именно не единицу. Например, следующий код увеличивает i на 1 и уменьшает j на 1.

int i = 3, j = 3;
i++; // i становится 4
j--; // j становится 2

i++ произносится как i плюс плюс, а  i-- как i минус минус. Эти операторы известны как постфиксный инкремент (или постинкремент) и постфиксный декремент (или постдекремент), поскольку операторы ++ и -- размещаются после переменной. Эти операторы также могут быть размещены перед переменной, например:

int i = 3, j = 3;
++i; // i становится 4
--j; // j становится 2

++i увеличивает i на 1, а --j уменьшает j на 1. Эти операторы известны как префиксный инкремент (или преинкремент) и префиксный декремент (или предекремент).

Как вы можете видеть, в предыдущих примерах эффект i++ и ++i или i-- и --i одинаковый. Тем не менее, их эффекты различны, когда они используются в инструкциях, делающих что-то большее чем простое увеличение или уменьшение на единицу. Следующая таблица описывает их различия и даёт примеры:

Оператор Имя Описание Пример (подразумевается, что i = 1)
++var преинкремент Увеличивает var на 1 и использует новое значение var в инструкции int j = ++i;
// j равно 2, i равно 2
var++ постинкремент Увеличивает var на 1 и использует изначальное значение var в инструкции int j = i++;
// j равно 1, i равно 2
--var предекремент Уменьшает var на 1 и использует новое значение var в инструкции int j = --i;
// j равно 0, i равно 0
var-- постдекремент Уменьшает var на 1 и использует изначальное значение var в инструкции int j = i--;
// j равно 1, i равно 0

Дополнительные примеры для иллюстрации различий между префиксной формой ++ (или --) и постфиксной формой ++ (или --). Рассмотрим следующий код:

int i = 10;
int newNum = 10 * i++;

Он даёт точно такой же эффект как и код:

int newNum = 10 * i;
i = i + 1;

Т.е. i в итоге равняется 11, а newNum равняется 100.

В этом случае i увеличивается на 1, затем старое значение i используется для умножения. Поэтому newNum становится 100. Если i++ заменить на ++i следующим образом:

int i = 10;
int newNum = 10 * (++i);

То этот код будет эквивалентом следующего:

i = i + 1;
int newNum = 10 * i;

Т.е. теперь в конечном счёте i равно 11, а newNum равно 110.

i увеличена на 1, и в умножении используется новое значение i. Поэтому значение newNum становится 110.

Вот другие примеры:

double x = 1.0;
double y = 5.0;
double z = x-- + (++y);

После выполнения всех трёх строк, y становится 6.0, z становится 7.0, а x становится 0.0.

Совет: использование операторов инкремента и декремента делает выражения короткими, но также делает их сложными и трудными для чтения. Избегайте использование этих операторов в выражениях, которые изменяют несколько переменных или одну и ту же переменную несколько раз, примерно так: int k = ++i + i.

Проверь себя:

  1. Какие из этих утверждений верны?

a. Любое выражение может использоваться как инструкция языка.

b. Выражение x++ может использоваться как инструкция.

c. Инструкция x = x + 5 также является выражением.

d. Инструкция x = y = x = 0 неправильна.

  1. Покажите вывод следующего кода:
int a = 6;
int b = a++;
System.out.println(a);
System.out.println(b);
a = 6;
b = ++a;
System.out.println(a);
System.out.println(b);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo