Один из популярных вопросов для джуниров: рассказать про equals и hashCode. У меня этот вопрос встречался на двух собеседованиях из семи. Впрочем, будь у меня изначально уровень чуть пониже, то этот вопрос встречался бы чаще. Если нет опыта, то его наверняка зададут. С примитивами всё просто. Мы сравниваем через == и всё хорошо. Но почему нельзя аналогично делать с объектами? Потому что == сравнивает по ссылкам, а не по параметрам объекта. Грубо говоря, == сравнивает, что два кота находят в одной квартире. А equals сравнивает именно параметры котов (цвет, возраст, длину хвоста). Чтобы сравнивать именно по параметрам надо переопределять метод equals. Кстати, задумывались ли вы о том, как этот метод реализован в String? Известно, что строки рекомендуется сравнивать именно так, но что там под капотом? Там обычное посимвольное сравнение. Предположим, у нас есть три кота: Если мы попробуем сейчас сравнить Васька.equals(Мурзик), то будет исключение. Просто потому что джава не знает, как имен
Вопрос с собеседования: equals и hashCode. Зачем они нужны?
11 мая 202011 мая 2020
1870
3 мин