HTML Diff
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>