Встречается на собеседованиях • сегодня

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

Сравнение объектов с использованием оператора `==` проверяет, ссылаются ли две ссылки на один и тот же объект в памяти, а не сравнивает их содержимое. То есть, если две переменные ссылаются на разные объекты, даже если содержимое этих объектов одинаково, он вернёт `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

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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