Как работает сравнение примитивного int и объекта Integer в Java

Первые три проверки дадут true. Последняя обычно false, но для 300 идентичность boxed-объектов не гарантирована и может зависеть от расширенного cache. Для Integer == сравнивает ссылки.

Короткий ответ

Что ответить на собеседовании

Первые три проверки дадут 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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее