Сравнение Integer‑объектов и роль кэша значений

Для 100 результат true гарантирован. Для 200 обычно false, но утверждение «все большие значения создаются отдельно» неверно: реализация может расширять кеш 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-обёртка вызовет исключение.

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

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

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

Подробнее