Реализация equals в Object - PullRequest
       38

Реализация equals в Object

0 голосов
/ 25 сентября 2018

Я читал о методе equals в Java и слышал, как люди говорят, что == проверяет равенство ссылок (являются ли они одним и тем же объектом)..equals() проверяет равенство значений (являются ли они логически "равными").

Я верю, что это правда, но, если вы посмотрите на исходный код для .equals(), он просто перейдет на ==

из класса Object:

    public boolean equals(Object obj) {
    return (this == obj);
}

Теперь я в замешательстве.Я вижу, что мы проверяем, имеют ли текущий объект ту же ссылку на явный параметр.Проверяется ли на равенство ссылок или на равенство значений?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Объект не имеет значения для сравнения с чем-либо.

Но для того, чтобы иметь смысл, он должен обеспечить реализацию для таких методов, как equals () или hashCode ().

Итак, чтобы быть точным: классы, производные от Object, должны переопределять equals () в случае, если они заменяют равенство ссылок на "семантику значений".

0 голосов
/ 25 сентября 2018

Из Javadoc :

Метод equals для класса Object реализует максимально различающее возможное отношение эквивалентности на объектах;то есть для любых не null опорных значений x и y этот метод возвращает true тогда и только тогда, когда x и y ссылаются на один и тот же объект (x == y имеет значение true).

Object, являющийся базовым базовым классом, это единственное определение equals, которое он может предоставить.Нет полей для сравнения между экземплярами, поэтому экземпляр может быть равен только самому себе.


В комментарии вы сказали:

Я хотел бы знатьо сравнении строк Я вижу, что люди используют его все время

Ваш вопрос задает о Object, а не String.String переопределяет equals, потому что определение Object equals не подходит для String.Следовательно, String определяет свое собственное (в соответствии с семантикой, необходимой для equals реализаций).

...