Пул объектов Integer и сравнение по ссылке

X == y даст true, потому что 100 входит в гарантированный кеш автобоксинга. P == q для 300 обычно false, но расширенный кеш может изменить результат.

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

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

X == y даст true, потому что 100 входит в гарантированный кеш автобоксинга. P == q для 300 обычно false, но расширенный кеш может изменить результат.

Подробный разбор

Ответ с пояснениями

Условие

Изучить, как работает автопреобразование (autoboxing) в Java и как сравнивать объекты типа Integer оператором ==, когда значения находятся внутри и за пределами кэша Integer (от -128 до 127).

public static void main(String[] args) {
    Integer x = 100;
    Integer y = 100;

    Integer p = 300;
    Integer q = 300;

    System.out.println("x == y: " + (x == y));
    System.out.println("p == q: " + (p == q));
}

Ответ

X == y даст true, потому что 100 входит в гарантированный кеш автобоксинга. P == q для 300 обычно false, но расширенный кеш может изменить результат.

Сравниваются ссылки на Integer, не сами числа. Для значений вне −128…127 Java не обещает ни обязательного разделения, ни обязательного совпадения объектов при автобоксинге. Поэтому корректное сравнение значений — Objects.equals(p, q) или equals при заведомо ненулевых ссылках. Принудительный new Integer не нужен и является устаревшим способом создания обёртки.

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

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

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

Подробнее