TGViewer
Java Interview Review Java Interview Review @javasobes · 6.56K subscribers
Post #379 12.4K
equals, hashCode

Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или HashSet. HashMap работает тем эффективнее, чем «лучше» распределение хэшей.

Контракт:
1. Если объекты equals, у них должны быть одинаковые hashCode (не обязательно наоборот – коллизии допустимы!)
2. equals должен быть отношением эквивалентности
3. Ничто не может быть equals(null)
4. equals и hashCode должны возвращать одни и те же значения для одного и того же объекта при каждом последующем вызове, даже если состояние объекта изменилось. Это делает реализацию для изменяемых (mutable) объектов крайне сложной.

По умолчанию equals сравнивает на ==. С умолчательным hashCode дела обстоят интереснее: он зависит от реализации JVM, и может быть неожиданным. Например в OpenJDK 7 это случайное число.

Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).

#МетодыObject
More from @javasobes
  1. Sep 17, 2022Что такое synchronized? Можно применять как модификатор метода, и как самостоятельный опер…
  2. Sep 14, 2022​Чем отличаются checked и unchecked исключения? Вопрос формулируют по-разному, суть вопрос…
  3. Sep 13, 2022Какие бывают модификаторы? 🔘 Модификаторы доступа private, protected, public (рассмотрим…
  4. Sep 8, 2022Какие существуют литералы? Литерал – последовательность символов, обозначающая значение пр…
  5. Sep 6, 2022Чем отличается final finally finalize? (2/2) finally – часть языковой конструкции try-catc…
  6. Sep 2, 2022Чем отличается final finally finalize? (1/2) Тем, что это даже синтаксически разные вещи.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →