Назад к вопросам
Junior
74
questionbank

Почему объекты в Java нельзя сравнивать с помощью оператора '=='?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Оператор == для сравнения объектов в Java по умолчанию сравнивает ссылки на объекты, а не их содержимое. Он проверяет, указывают ли две переменные на один и тот же экземпляр объекта в памяти.

Для сравнения содержимого объектов следует использовать метод equals(). Метод equals() определен в классе Object, и его можно переопределить в своих классах для реализации специфической логики сравнения содержимого.

Пример использования == и equals():

String s1 = new String("hello");
String s2 = new String("hello");
String s3 = s1;

// Сравнение ссылок - false, так как это разные объекты
System.out.println(s1 == s2);

// Сравнение ссылок - true, так как s1 и s3 указывают на один и тот же объект
System.out.println(s1 == s3);

// Сравнение содержимого - true, так как строки одинаковы
System.out.println(s1.equals(s2));

Исключением являются примитивные типы данных (int, boolean, char и т.д.), для которых оператор == сравнивает непосредственно их значения. Для объектов-оберток примитивных типов (Integer, Boolean, Character и т.д.) оператор == также сравнивает ссылки, а не значения, если только не используется автоупаковка/автораспаковка для небольших, кешируемых значений (например, Integer от -128 до 127).