Метод equals в классе Object и в моем

119
25 августа 2021, 11:40

Вот метод equals() в классе Object:

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

Если this (объект) равен аргументу в методе equals (объекту), то возвращает true либо уже false.

А вот equals переопределенный в моём классе.

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cat cat = (Cat) o;
        return id == cat.id;
    }

Но тут получается тоже самое:

 public boolean equals(Object o) {
            if (this == o) return true;

Только есть в отличие от первого примера оператор if, но отрабатывает так же получается если объект равен аргументу (объекту) возвращает true, правильно ли я понял? Помогите разобраться

Answer 1

Знак == который используется в классе Object проверяет равенство ссылок, а не самих объектов. Равенство ссылок гаранитирует, что они ссылаются на один и тот же объект, а значит и сам объект один и тот же, он точно равен сам себе.

Поэтому, когда переопределяется метод equals, зачастую сразу сравнивают ссылки, это относительно быстрая и 'дешевая' проверка. Если же ссылки отличаются, идут проверки по классам, полям и т.д.

То есть, мы делаем самую дешевую операцию, а если её результат вернул false, копаем глубже, и сравниваем основательно.

READ ALSO
Яндекс Карты API 429 Too Many Requests

Яндекс Карты API 429 Too Many Requests

Буквально пару дней назад появилась проблема с доступом к картам на собственном сайтеЗапросов до 100 в день, а ответ отдает- 429 Too Many Requests

163
Как получить вчерашнюю дату на JavaScript?

Как получить вчерашнюю дату на JavaScript?

Как получить правильною (формат даты ддмм

154