Вот метод 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, копаем глубже, и сравниваем основательно.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей