tgoop.com/Java_Iibrary/1714
Last Update:
Задумывались, почему оператор == в Java работает для одних значений Integer, а для других — нет?
Дело в механизме, который называется Integer Caching.
JVM кэширует объекты Integer в диапазоне от -128 до 127. Когда вы присваиваете значение в этом диапазоне, Java переиспользует один и тот же объект из кэша. Поэтому две переменные с одинаковым числом в этом диапазоне указывают на одну и ту же ссылку, и == возвращает true
Но за пределами диапазона, например для 128 или 1000, каждый раз создается новый объект. Ссылки разные, поэтому == вернет false, даже если значения совпадают.
Главное, что стоит запомнить: == сравнивает ссылки на объекты, а не сами значения. Чтобы сравнить числа, всегда используйте .equals()
Этот трюк с кэшированием также работает для Byte, Short, Character (до 127) и Long (от -128 до 127)

