Первые три проверки дадут true. Последняя обычно false, но для 300 идентичность boxed-объектов не гарантирована и может зависеть от расширенного cache. Для Integer == сравнивает ссылки.
Как работает сравнение примитивного int и объекта Integer в Java
Первые три проверки дадут true. Последняя обычно false, но для 300 идентичность boxed-объектов не гарантирована и может зависеть от расширенного cache. Для Integer == сравнивает ссылки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Код‑ревью метода, иллюстрирующего различия при сравнении примитивных и объектных типов int и Integer внутри кэшируемого диапазона и за его пределами.
private static void intPool() {
int x = 127;
int y = 127;
System.out.println(x == y);
x = 300;
y = 300;
System.out.println(x == y);
Integer objX = 127;
Integer objY = 127;
System.out.println(objX == objY);
objX = 300;
objY = 300;
System.out.println(objX == objY);
}
Ответ
Первые три проверки дадут true. Последняя обычно false, но для 300 идентичность boxed-объектов не гарантирована и может зависеть от расширенного cache. Для Integer == сравнивает ссылки.
Примитивные x и y сравниваются по числовому значению и при 127, и при 300. Для boxing константы 127 обеспечивается совместное представление в гарантированном диапазоне. Вне него полагаться на == нельзя. Для значений используйте equals либо Objects.equals с поддержкой null; сравнение Integer с int выполняет unboxing и может бросить NPE.
Источник: docs.oracle.com.