Программирование • 17 февраля 2025 • 5 мин чтения

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

Разбираемся в нюансах использования инкремента и декремента, префиксных и постфиксных вариациях и особенностях работы с отрицательными числами.

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

Инкремент и декремент — это специальные операторы в Java, которые позволяют одним действием увеличить или уменьшить значение переменной на одну единицу.
Инкремент увеличивает значение переменной на 1. В Java для этого используется оператор ++. Декремент уменьшает значение переменной на 1, для этого используется оператор --. Они относятся к арифметическим операторам, подробнее о них писали в статье про операторы Java.

С точки зрения программирования инкремент и декремент — это удобные и быстрые инструменты, которые легко воспринимаются на экране в массиве кода и помогают специалисту увидеть алгоритм. Эти операторы оптимально выполняются в любых машинных кодах. Поэтому код, который использует инкремент и декремент, в принципе работает быстрее, чем если мы просто напишем х = х + 1.

Инкремент и декремент позволяют кратко описать процесс увеличения или уменьшения переменной в коде. Программист видит эту конструкцию и сразу понимает, что здесь происходит. Операторы помогают сэкономить текст и уменьшить ментальную нагрузку на программиста. Также запись вида х++ показывает, что мы её применяем именно в алгоритмическом смысле, а не просто как некую арифметическую операцию.

Чтобы быстро писать код, нужно разбираться в нюансах языка и много практиковаться. На курсе «Java-разработчик» студенты изучают самые используемые инструменты, практикуются в тренажёре и участвуют в хакатонах. Первые уроки курса доступны бесплатно.

Префиксный и Постфиксный: в чем разница

Изначально в программировании использовали только выражения вида x++ и х--. Но со временем языки стали усложняться, и программисты поняли, что не все алгоритмы удобно описать этим выражениями. В алгоритмах, которым требуются опережающее значение переменной, удобно использовать специальные префиксные операторы.

Определения «постфиксный» и «префиксный» в данных операторах обозначают конкретное расположение знаков: до или после переменной. В префиксном варианте переменная увеличивается до присвоения, а в постфиксном — после.

● Префиксные операторы ++х и --х записывают в переменную х изменённое значение и его же возвращают вместо себя в исходное выражение.

● Постфиксные операторы х++ и х-- возвращают вместо себя текущее значение переменной х, а потом записывают в х новое значение.

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

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

Если нам нужно просто инкрементировать отдельным действием, то можно использовать стандартное выражение х++. Но если использовать выражение в алгоритмах, но необходимо обращать внимание на разницу между префиксным и постфиксным расположением знаков.

Примеры использования инкремента и декремента в Java

Разберём пару простых примеров использования инкремента и декремента.

В этом примере видно, что в префиксном варианте переменная увеличивается до присвоения, а в постфиксном — после.

Как и инкременты, декременты имеют свою специфику в зависимости от того, используются ли они в префиксной или постфиксной форме.

Инкремент и декремент с отрицательными числами

Математические операции инкремента и декремента аналогично работают и с отрицательными числами. Тут важно помнить, что когда мы увеличиваем отрицательные числа, они уменьшаются. Если нам нужен некий индекс, то, условно говоря, мы увеличиваем число, прибавляя 1, и оно уменьшается при этом в абсолютном значении.

Объясним на простом примере: когда мы говорим, что температура повышается, на самом деле отрицательное число уменьшается. То же самое происходит и с инкрементом и декрементом с отрицательными числами. Когда мы инкрементируем отрицательное число, оно увеличивается, а его значимая часть — модуль — при этом уменьшается.

Пётр Кушнир, автор курса «Java-разработчик» в Практикуме
На самом деле с инкрементом и декрементом очень редко работают с отрицательными числами. Их используют в основном в алгоритмах, где идёт проход по некоему списку, а в программировании списки не имеют отрицательных индексов и начинаются с нуля. Условно это возможно, но на практике встречается довольно редко.

Применение инкремента и декремента в циклах

Циклы в Java — это специальные конструкции, которые позволяют некие повторяющиеся операции описать один раз. Инкременты и декременты значительно упрощают работу в циклах.

Возьмём в качестве примера классическую присказку фанатичных велосипедистов: Ride — Eat — Sleep — Repeat. Это и есть цикл: несколько операций, которые повторяются ежедневно. Инкремент в этом случае не нужен — мы и так понимаем, что находимся в колесе.

Но если бы мы имели в виду план на неделю, то мы бы заложили, что у нас есть семь дней. Предположим, что у нас есть переменная, которая обозначает текущий день, — например, d. В конце цикла мы увеличиваем её номер, то есть, условно говоря, цикл увеличивается на один день.

Чтобы это сделать, нам понадобится инкремент: d++. Он позволит в каждой итерации цикла увеличить день на плюс один и таким образом пройти по всей неделе. Итерацию, соответственно, мы берём в один день.

Если бы мы хотели обозначить цикл в каждый час, мы бы написали h++ и таким образом прошли в цикле все имеющиеся в сутках 24 часа. Соответственно, один цикл был бы вложен в другой.

Основной смысл инкремента здесь — это последовательное увеличение переменных d и h, которые отвечают за день или за час в цикле внутри цикла.

Советы эксперта

В большинстве случаев инкременты и декременты используют именно в циклах. И поэтому классическая рекомендация — сначала описать цикл на бумаге, понять, как он работает, и только потом начинать писать код.

Условно говоря, у нас есть некий цикл упаковки товара: товар сначала не упакован, затем мы кладём его в коробку, потом коробку заклеиваем скотчем, клеим штрихкод с адресом получателя и т. д.

Чтобы описать такой цикл по множеству товаров, мы все стадии изменений выписываем в столбик, а в колонках указываем переменную: 1, 2, 3, 4, 5, 6 и т. д. — в зависимости от единиц товара. Соответственно, в таблице мы видим, как в цикле упаковки изменяется счётчик товаров и их состояний. Если любой алгоритм расписывать в виде такой таблички на бумаге, станет понятно, как работает цикл и сам инкремент. Каждый раз, когда мы двигаемся слева направо, номер клеточки увеличивается, а номер клеточки в данном примере и есть переменный инкремент.

Пётр Кушнир

Если новичок только начинает разбираться в циклах и в особенностях использования инкремента и декремента, советую попробовать расписать состояние цикла вручную, это такая доступная и устоявшаяся практика.

Более опытным программистам я бы посоветовал разобраться, как именно меняется переменная в префиксной и постфиксной вариациях, и постараться самому придумать примеры или найти их в реальности, где и в каких алгоритмах это можно использовать.

Иными словами, полезно научиться видеть в описании самого алгоритма варианты использования инкремента и декремента. Это получится сделать через постоянную практику. Важно задавать себе вопросы: а как это можно описать через циклы, а как здесь может помочь инкремент?

Статью подготовили:
Пётр Кушнир
Яндекс Практикум
Автор курса «Java-разработчик»
Мария Вихрева
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться
Как найти работу после онлайн-курсов в 2025: советы реальных выпускников. Бесплатный вебинар 27 февраля
Mon Feb 17 2025 14:29:59 GMT+0300 (Moscow Standard Time)