X == y даст true, потому что 100 входит в гарантированный кеш автобоксинга. P == q для 300 обычно false, но расширенный кеш может изменить результат.
Пул объектов Integer и сравнение по ссылке
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 не нужен и является устаревшим способом создания обёртки.