Ответ
Полный контракт метода equals() определен в документации (JavaDoc) класса java.lang.Object. Правило рефлексивности является его первой и обязательной частью.
Контракт из JavaDoc Object.equals(Object obj):
- Рефлексивность (Reflexive): Для любого ненулевого объекта
x,x.equals(x)должно возвращатьtrue. - Симметричность (Symmetric).
- Транзитивность (Transitive).
- Согласованность (Consistent).
- Сравнение с
null: Для любого ненулевого объектаx,x.equals(null)должно возвращатьfalse.
Практическая реализация рефлексивности:
Чаще всего она обеспечивается неявно, но для оптимизации в начале метода equals добавляют проверку на равенство ссылок (==).
@Override
public boolean equals(Object o) {
// Рефлексивность: объект равен самому себе
if (this == o) {
return true;
}
// Проверка типа и приведение
if (o == null || getClass() != o.getClass()) {
return false;
}
MyClass myClass = (MyClass) o;
// Сравнение значимых полей
return Objects.equals(field1, myClass.field1) &&
Objects.equals(field2, myClass.field2);
}
Ссылка на источник: Oracle Java SE 8 Documentation - Object.equals()