Вот метод 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
, правильно ли я понял? Помогите разобраться
Знак ==
который используется в классе Object
проверяет равенство ссылок, а не самих объектов. Равенство ссылок гаранитирует, что они ссылаются на один и тот же объект, а значит и сам объект один и тот же, он точно равен сам себе.
Поэтому, когда переопределяется метод equals
, зачастую сразу сравнивают ссылки, это относительно быстрая и 'дешевая' проверка. Если же ссылки отличаются, идут проверки по классам, полям и т.д.
То есть, мы делаем самую дешевую операцию, а если её результат вернул false
, копаем глубже, и сравниваем основательно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Буквально пару дней назад появилась проблема с доступом к картам на собственном сайтеЗапросов до 100 в день, а ответ отдает- 429 Too Many Requests
Сразу демка https://codepenio/lubus/pen/rNBXJRB