Подтвердить что ты не робот

Когда я должен переопределить функцию Equals?

Возможный дубликат:
Java: Всегда переопределять равные?

следует ли переопределить функцию equals для любого класса, который я создаю?

даже для очень простых классов, которые содержат только очень простые атрибуты и equals Мне нужен каждый его атрибут равным?

4b9b3361

Ответ 1

следует ли переопределить функцию равенства для любого класса, который я создаю?

Переопределить equals, если (и только если) объект "представляет некоторые данные", т.е. если он моделирует что-то вроде Person, Car или RecipieIngredient (они обычно попадают в коллекции и т.д.). Не переопределяйте равные для других типов классов, например LoginServlet или DatabaseUtil.

Не забудьте всегда переопределять hashCode всякий раз, когда вы переопределяете equals.

(Естественный следующий вопрос:) Что произойдет, если я не переопределяю equals и hashCode?

Любые два объекта будут считаться неравными, если они не являются одним и тем же объектом.

[...] Мне нужно, чтобы каждый его атрибут был равен?

Обычно да. Это зависит от того, как вы определяете свое понятие равенства. Обратите внимание, что для ссылочных типов вы можете повторно использовать/делегировать реализацию этого объекта equalshashCode) при реализации своих собственных.

Связанные вопросы:

Ответ 2

Вы должны только переопределить equals(), если у вас есть причина для этого. Как описано здесь, очень трудно написать правильный equals() метод для нефинальных или изменяемых классов.

Если вашему приложению требуется какая-то концепция равенства, отличная от "идентичного объекта", тогда непременно сделайте это. Просто прочитайте приведенную выше ссылку, чтобы быть в курсе происходящего. Но как вопрос? Определенно нет.

Ответ 3

Ну, понятие over-riding equals() более понятно, если вы думаете об этом в реальных условиях.

Метод Equals должен быть перегружен только тогда, когда два объекта должны быть равными логически. Кроме того, если вы боитесь, что где-то в вашей программе объект может быть воссоздан, тогда вы должны переопределить equals().

Очень хороший пример - объекты String в java.

   String string1= new String("hello");

   String string2= "hello";

Являются ли они равными?.. да они абсолютно... логически. Вы можете проверить их равенство только потому, что Java уже переопределил метод String equals().

Как мы все знаем, класс на самом деле является шаблоном для его объектов. Поэтому давайте рассмотрим, есть класс сотрудников, который фактически определяет, какие атрибуты могут присутствовать сотрудники компании, а фактические сотрудники компании являются объектами этого класса. Как правило, атрибуты сотрудника могут быть следующими.

1.Employee Name

2.Employee ID

3. Даты рождения ,,... ,,,

Итак, в этом случае вам нужно просто проверить, равен ли идентификатор сотрудника или нет в методе equals. Но да, если вашим объектам не хватает такого отличного атрибута, тогда вы должны пойти и проверить почти все значения, чтобы ваша программа не считала двух разных людей равными.