Встречается на 12% собеседований по Java

Почему нельзя сравнивать объекты через «==»

Сравнение объектов с использованием оператора `==` проверяет, ссылаются ли две ссылки на один и тот же объект в памяти, а не сравнивает их содержимое. То есть, если две переменные ссылаются на разные объекты, даже если содержимое этих объектов одинаково, он вернёт `false`.

Пример:

java
String str1 = new String("Java");
String str2 = new String("Java");

System.out.println(str1 == str2); // Выведет "false", потому что str1 и str2 указывают на разные объекты в памяти

В этом примере, несмотря на то что текстовое содержимое

`str1` и `str2` одинаково ("Java"), оператор `==` вернет `false`, потому что `str1` и `str2` — это разные объекты в памяти.

Правильное сравнение объектов

Следует использовать метод `.equals()`, который предназначен для сравнения содержимого объектов. Большинство классов в стандартной библиотеке и пользовательские классы должны переопределять метод `.equals()` для обеспечения корректного сравнения значений объектов.

java
String str1 = new String("Java");
String str2 = new String("Java");

System.out.println(str1.equals(str2)); // Выведет "true", потому что содержимое объектов одинаково

В этом случае метод `.equals()` сравнивает значения строк, а не их ссылки, и возвращает `true`, потому что текстовое содержимое `str1` и `str2` действительно одинаково.

Использование `==` для сравнения объектов не является корректным подходом, когда необходимо сравнить их содержимое, поскольку он сравнивает только ссылки на объекты. Для сравнения содержимого объектов следует использовать метод `.equals()`, который должен быть корректно переопределен в классе объектов, которые предполагается сравнивать.

March 9, 2024, easyoffer

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы