Первая строка — a == b: true. Вторая обычно c == d: false, но для 200 результат сравнения ссылок не гарантируется: cache может быть расширен.
Что выведет программа при сравнении объектов Integer оператором ==
Первая строка — a == b: true. Вторая обычно c == d: false, но для 200 результат сравнения ссылок не гарантируется: cache может быть расширен.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой результат будет напечатан в консоль при запуске следующего кода:
public class Test2 {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
Integer c = 200;
Integer d = 200;
System.out.println("a == b: " + (a == b));
System.out.println("c == d: " + (c == d));
}
}
Ответ
Первая строка — a == b: true. Вторая обычно c == d: false, но для 200 результат сравнения ссылок не гарантируется: cache может быть расширен.
100 входит в гарантированный диапазон boxing констант от −128 до 127. Оператор == между двумя Integer проверяет идентичность объектов, а не равенство чисел. Поэтому поведение вне диапазона нельзя использовать как часть логики программы. Для числового равенства выбирайте equals или Objects.equals при возможных null.
Источник: docs.oracle.com.