Для 100 результат true гарантирован. Для 200 обычно false, но утверждение «все большие значения создаются отдельно» неверно: реализация может расширять кеш Integer.
Сравнение Integer‑объектов и роль кэша значений
Для 100 результат true гарантирован. Для 200 обычно false, но утверждение «все большие значения создаются отдельно» неверно: реализация может расширять кеш Integer.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Исследуется поведение сравнения объектов типа Integer оператором ==. Поясняется, почему для чисел в диапазоне от -128 до 127 ссылки могут указывать на один и тот же объект, тогда как для больших значений каждый объект создаётся отдельно.
public class Test2 {
public static void main(String[] args) {
Integer first = 100;
Integer second = 100;
Integer third = 200;
Integer fourth = 200;
System.out.println("first == second: " + (first == second));
System.out.println("third == fourth: " + (third == fourth));
}
}
Ответ
Для 100 результат true гарантирован. Для 200 обычно false, но утверждение «все большие значения создаются отдельно» неверно: реализация может расширять кеш Integer.
Автобоксинг не равнозначен обязательному созданию нового объекта. Пределы гарантированной повторной идентичности — −128…127; за их пределами код не должен зависеть от == двух обёрток. First.equals(second) и third.equals(fourth) вернут true, поскольку сравнивают значения. Если одна сторона сравнения имеет тип int, возникает распаковка и сравнение чисел, но null-обёртка вызовет исключение.