Я ожидал, что это будет работать в бесконечном цикле, но это не так.
Нет, это не так. В итоге значение снова станет 0.
В частности, это будет логично выполнить так:
1
2
3
...
2,147,483,646
2,147,483,647
-2,147,483,648 // Integer overflow => wrapping
-2,147,483,647
...
-3
-2
-1
0
... то цикл завершится
От section 15.18.2 of the JLS:
если целое сложение с переполнением, то результатом являются младшие биты математической суммы, представленные в некотором достаточно большом формате с двумя дополнениями. Если происходит переполнение, знак результата не совпадает с знаком математической суммы двух значений операнда.
Там нет памяти проблемы с этим кодом, потому что он не выполняет никаких распределений - это только увеличивает локальную переменную, целиком в стеке.
Теперь ли оно или нет на самом деле делает это совсем другое дело - если JIT может работать, что поведение будет без выполнения каждой итерации, он может оптимизировать его прочь - но это деталь реализации. Важной частью является понимание логики поведения.
Что еще более важно, почему вы думаете, что это должно * привести к проблемам с памятью? Где здесь используется память? –
'Может ли кто-нибудь дать мне знать, что именно происходит?' - Целочисленное переполнение. – devnull
+1, я не вижу ничего плохого в этом вопросе. – Maroun