JavaRush/Java блог/Архив info.javarush/Что такое инкрементирование и декрементирование
L2CCCP
9 уровень

Что такое инкрементирование и декрементирование

Статья из группы Архив info.javarush
участников
Многие новички не знают, что такое инкремент и декремент, но уверены, все видели использование "i++, ++i, i-- или --i" в цикле for. Итак, немного пояснений. Что такое инкрементирование и декрементирование - 1

Что такое инкремент?

Инкремент — это операция во многих языках программирования, которая выполняет увеличение переменной. Чаще всего под инкрементом подразумевается увеличение переменной на 1 единицу. Обратной операцией называют декремент. Декремент — это уменьшение переменной. Чаще всего также на единицу. В Java инкремент и декремент — это в первую очередь унарные операторы, которые применяются к какой-либо числовой переменной. Инкремент: обозначается двумя знаками плюс "++" и увеличивает значение переменной на 1. Декремент: обозначается двумя знаками минус "--" и уменьшает значение переменной на 1. Пример:
int x = 10, z = 10;
x++;
z--;

System.out.println("x: " + x + ", z: " + z);
В результате x будет инкрементирована, а z — декрементирована. И в консоли мы увидим: x: 11, z: 9 По факту можно писать и так:
int x = 10, z = 10;
x = x + 1;
z = z - 1;

System.out.println("x: " + x + ", z: " + z);
Но зачем писать лишнее, если нам нужно увеличить или уменьшить переменную всего на 1? Хорошо, что такое и инкрементирование и декрементирование разобрались, но это еще не все. У инкремента и декремента есть 2 формы — prefix и postfix. О боже что это, подумали вы?) Не пугайтесь: тут тоже все легко. Prefix, или Префиксная форма, описывается перед переменной "++x или --x", изначально икрементирует или декрементирует переменную. Postfix, или Постфиксная форма, описывается после переменной "x++ или x--", икрементирует или декрементирует переменную после вычисления. Если вы обратили внимание на слово вычисления, то сделали это не зря, так как обе формы работают одинаково, если не используются в вычислениях. Вот вам пример без вычислений:
int x = 10, z = 10;
x++;
++z;

System.out.println("x: " + x + ", z: " + z);
В результате обе переменные будут равны 11. А вот пример с вычислением:
int x = 10, c = 10;
final int y = 13 - x++;
final int z = 13 - ++c;

System.out.println("y: " + y + ", z: " + z);
Как видим, обе переменные "x и c" равны и уравнения аналогичны, НО используются разные формы записи оператора инкремента. В результате вычислений переменная y будет 3, а вот z будет 2. Вы уже наверное догадались почему, исходя из того, что написано выше. Если нет, то давайте “разжуем” все вместе. Постфиксная форма сработает после вычислений, а это значит, что уравнение сработает так:
x = 10;

// Начало уравнения.
y = 13 - x; // С начала производим вычисление (x все еще 10)
x += 1; // Производим увеличение на 1
// Конец уравнения.
Префиксная же сработает так:
c = 10;

// Начало уравнения.
c += 1; // Производим увеличение на 1
z = 13 - c; // Производим вычисление (c уже 11)
// Конец уравнения.
Ну вот и вся история :) Надеемся, для вас это было полезно и познавательно. Успехов в освоении Java ;) Изучить и попрактиковаться в использовании инкремента, декремента и других операторов в Java можно на курсе Javarush в квесте Java Multithreading:
Комментарии (13)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
22 апреля 2023, 05:53
А так можно в JAVA с += 1?
Алекс Гюнтер
Уровень 2
30 марта 2023, 02:35
Алекс Гюнтер
Уровень 2
30 марта 2023, 02:34
NetCat
Уровень 2
4 марта 2023, 16:52
кек
vincent
Уровень 2
1 ноября 2022, 18:02
почему i++ и i-- выводят одно и тоже значение? вот пример, если в строке с переменной n поставить b++, то программа скомпилирует 21 public class Main{ public static void main (String[] args) { int a = 32; int b = 21; int n = b--; System.out.println(n); } }
Leo100
Уровень 1
14 августа 2021, 11:26
а почему это я ваш пример засунул в онлайн среду разработки и она мне говорит что ошибка? public class Main { public static void main(String[] args) { int x = 10, z = 10; x++; ++z; System.out.println("x: " + x + ", z: " + z); Main.java:16: error: reached end of file while parsing System.out.println("x: " + x + ", z: " + z); ^ 1 err
Leo100
Уровень 1
14 августа 2021, 08:20
Не пойму а почему так выводится? System.out.println("x: " + x + ", z: " + z); Я понимаю что это конкатенация а почему "x: " это как понять? В строке мы пишем переменную х: но почему с точечками? вот такими :
Denis
Уровень 1
13 апреля 2020, 14:32
Объясните, почему здесь cледующий результат: int a = 10; int b = 20; int c = 25; System.out.println("a++ = " + (a++)); System.out.println("b-- = " + (a--)); System.out.println("c++ = " + (c++)); System.out.println("++c = " + (++c)); a++ = 10 b-- = 11 c++ = 25 ++c = 27 Не могу понять почему получилоcь b-- = 11 ++c = 27
Александр
Уровень 20
9 мая 2020, 20:13
Судя по твоему фрагменту кода, с переменной b ты не делаешь никаких операций. А что касается ++c , то, опять же из твоего кода, ты здесь
System.out.println("c++   = " +  (c++));
прибавляешь единицу к 25 (хотя в консоль выводится 25, так как сперва выводишь, потом прибавляешь и c = 26 получается), а вот здесь
System.out.println("++c   = " +  (++c));
ты перед выводом в консоль к 26 прибавляешь 1 и уже потом выводишь в консоль 27.
Владислав
Уровень 10
6 апреля 2020, 08:02
Объясните, почему здесь нет вычислений: int x = 0; int y = 0; System.out.print(++x); System.out.print(y++); Но в результате 1 и 0 ? Чем принципиально отличается мой вариант от вашего: System.out.println("x: " + x + ", z: " + z); ?
Владислав
Уровень 10
6 апреля 2020, 08:36
Получается, что дело не в вычислениях? В первом случае к X префикс прибавляет один, потом происходит принт X. При этом Y принтится сразу, а потом уже к нему прибавляется один, но мы этого уже не видим. Во втором примере X и Y сразу прибавляют по одному (в строках x++ и ++z). А потом уже происходит принт обоих. Верно?
Dwarf Ворген
10 апреля 2020, 07:54
Если у тебя инкремент идет прям в вычислении, то ты сначала вычисляешь, потом инкрементируешь:
int x = 10;
final int y = 13 - x++;
x сначала будет равен 10, и результат вычисления = 3. Потом только x увеличится на 1 и будет равен после вычислений 11. А если никаких вычислений с этими переменными нет, то то они сразу увеличатся на 1:
int x = 10, z = 10;
x++;
++z;
Оба (и x, и z) после инкремента будут сразу равны 11.
Dwarf Ворген
10 апреля 2020, 08:00
А если например так:
int x = 10;
            x++;
            final int y = 13 - x;
То конечно сначала x увеличится на 1, потом у будет равен 2.