Какие знаешь правила переопределения equals

«Какие знаешь правила переопределения equals» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При переопределении equals() нужно соблюдать контракт:

  1. Рефлексивность: x.equals(x)true
  2. Симметричность: x.equals(y) == y.equals(x)
  3. Транзитивность: если x.equals(y) и y.equals(z), то x.equals(z)
  4. Консистентность: повторные вызовы equals() должны возвращать одинаковый результат
  5. Ненулевость: x.equals(null)false

Пример правильной реализации:

override fun equals(other: Any?): Boolean {
    if (this === other) return true
    if (other !is MyClass) return false
    return field1 == other.field1 && field2 == other.field2
}

Обязательно переопределяйте hashCode(), если переопределяете equals().