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