Вопрос проверяет понимание различий между сравнением ссылок и значений, а также особенностей объектов-обёрток.
Объекты-обёртки можно сравнивать по ссылке и по значению.
Оператор == сравнивает ссылки, а метод equals() — значения.
Для Integer результат == может быть неожиданным из-за кеширования.equals() всегда сравнивает числовое значение.
Для корректных сравнений следует использовать equals().
При работе с объектами-обёртками важно понимать, что именно сравнивается.
Оператор ==:
сравнивает ссылки на объекты
проверяет, указывают ли они на один и тот же объект
Пример:
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true (кеш)
Но:
Integer x = 1000;
Integer y = 1000;
System.out.println(x == y); // false
Метод equals():
сравнивает числовое значение
не зависит от кеширования
Пример:
Integer a = 1000;
Integer b = 1000;
System.out.println(a.equals(b)); // true
Причины:
автоупаковка (autoboxing)
кеширование объектов
неочевидное поведение ==
Для сравнения значений объектов-обёрток всегда следует использовать equals(), а == применять только при осознанной проверке ссылок.