0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Из языка Си в Java перекочевали две операции:<strong>инкремент</strong>++ и<strong>декремент</strong>--, которые очень часто встречаются вместе с циклами.</p>
1
<p>Из языка Си в Java перекочевали две операции:<strong>инкремент</strong>++ и<strong>декремент</strong>--, которые очень часто встречаются вместе с циклами.</p>
2
<p>Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную:</p>
2
<p>Эти унарные операции увеличивают и уменьшают на единицу число, записанное в переменную:</p>
3
<p>Кроме постфиксной формы, у них есть и префиксная:</p>
3
<p>Кроме постфиксной формы, у них есть и префиксная:</p>
4
<p>Кажется, что нет никакой разницы между постфиксной и префиксной формами, но тут начинаются сложности. В отличие от всех остальных операций, инкремент и декремент не только возвращают значение, но и<strong>изменяют значение переменной</strong>.</p>
4
<p>Кажется, что нет никакой разницы между постфиксной и префиксной формами, но тут начинаются сложности. В отличие от всех остальных операций, инкремент и декремент не только возвращают значение, но и<strong>изменяют значение переменной</strong>.</p>
5
<p>При использовании префиксной нотации сначала происходит изменение переменной, а потом возврат. При использовании постфиксной нотации - наоборот: можно считать, что сначала происходит возврат, а потом изменение переменной.</p>
5
<p>При использовании префиксной нотации сначала происходит изменение переменной, а потом возврат. При использовании постфиксной нотации - наоборот: можно считать, что сначала происходит возврат, а потом изменение переменной.</p>
6
<p>Правило работает одинаково для инкремента и декремента. Для простоты рассмотрим только инкремент:</p>
6
<p>Правило работает одинаково для инкремента и декремента. Для простоты рассмотрим только инкремент:</p>
7
<p>Что происходит в коде выше:</p>
7
<p>Что происходит в коде выше:</p>
8
<ol><li>Выводим на экран ++x - префиксный инкремент. Поэтому сначала значение переменной увеличилось на 1, потом результат вернулся и вывелся на экран</li>
8
<ol><li>Выводим на экран ++x - префиксный инкремент. Поэтому сначала значение переменной увеличилось на 1, потом результат вернулся и вывелся на экран</li>
9
<li>Так как значение изменилось, System.out.println(x) вывел 6</li>
9
<li>Так как значение изменилось, System.out.println(x) вывел 6</li>
10
<li>Теперь выводим на экран x++ - постфиксный инкремент. Поэтому мы получили значение, содержавшееся в переменной до ее увеличения на 1</li>
10
<li>Теперь выводим на экран x++ - постфиксный инкремент. Поэтому мы получили значение, содержавшееся в переменной до ее увеличения на 1</li>
11
<li>Так как значение изменилось, System.out.println(x) вывел 7</li>
11
<li>Так как значение изменилось, System.out.println(x) вывел 7</li>
12
</ol><p>Особенно сложно становится, когда инкремент вставляют внутрь других операций: x = i++ - 7 + --h. Понять такой код почти невозможно.</p>
12
</ol><p>Особенно сложно становится, когда инкремент вставляют внутрь других операций: x = i++ - 7 + --h. Понять такой код почти невозможно.</p>
13
<p>Рекомендации по использованию:</p>
13
<p>Рекомендации по использованию:</p>
14
<ul><li>Никогда не смешивайте операции без побочных эффектов с операциями с побочными эффектами. То же самое касается и методов</li>
14
<ul><li>Никогда не смешивайте операции без побочных эффектов с операциями с побочными эффектами. То же самое касается и методов</li>
15
<li>Используйте инкремент и декремент только там, где нет разницы между префиксным и постфиксным вариантом - отдельно от всего, на отдельной строчке кода</li>
15
<li>Используйте инкремент и декремент только там, где нет разницы между префиксным и постфиксным вариантом - отдельно от всего, на отдельной строчке кода</li>
16
</ul>
16
</ul>