Object
Что это
Object - суперкласс для всех классов в JAVA, кроме примитивов. Необходим для предоставления основных
методов в каждый java класс.
Правила переопределения equals():
- Рефлексивность - a.equals(a).
- Симетричность - a=b, b=a.
- Транзитивность - a=b, b=c, a=c.
- Согласованость - каждый раз одинаковый результат.
- Проверка на NULL - если NULL вернуть false.
Пример equals(Object obj):
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj == null || obj.getClass() != this.getClass()) {
return false;
}
Person guest = (Person) obj;
return a == guest.a && b.equals(guest.b) && c.equals(guest.c) //Если ссылочная переменная то equals()
}
Пример hashcode():
public int hashCode() {
return Objects.hash(a, b, c);
}
Договор(контракт) между equals() и hashcode():
- Если переопределен один из этих методов - нужно переопределить второй.
- В обоих метода использовать одинаковые поля.
- Если два объекта имеют разный hashcode, то они не равны.
- Если два объекта равны, то они должны иметь один и тот же hashcode.
- Если два объекта не равны, то они могут иметь или не иметь один и тот же hashcode(коллизия).