Це повинно бути:
- рефлексивний: об'єкт повинен дорівнювати собі.
- симетричний: х. equals(y) має повертати той самий результат, що й y. дорівнює (x)
- транзитивний: якщо х. дорівнює (y) і y. дорівнює (z), то також x. дорівнює (z)
- послідовне: значення . equals() має змінюватися, лише якщо властивість, яка міститься в . equals() змінюється (випадковість не допускається)
5. Рекомендації для дотримання
- Завжди використовуйте ті самі поля для створення hashCode() і equals() . …
- Функція equals() має бути узгодженою (якщо об’єкти не змінено, вона має повертати те саме значення).
- Щоразу, коли a. …
- Якщо ми перевизначаємо один метод, ми також повинні перевизначати інший метод.
Метод equals для класу Object реалізує найбільш дискримінаційне можливе відношення еквівалентності для об’єктів; тобто для будь-яких ненульових посилальних значень x і y цей метод повертає істину тоді і тільки тоді, коли x і y посилаються на той самий об’єкт ( x == y має значення true ).
Equals() і hashcode() є два важливі методи, надані класом Object для порівняння об’єктів. Оскільки клас Object є батьківським класом для всіх об’єктів Java, тому всі об’єкти успадковують реалізацію за замовчуванням цих двох методів.
У ньому зазначено, що: equals має визначати відношення еквівалентності – тобто відношення, яке є рефлексивним, симетричним і транзитивним; equals має бути узгодженим: повторні виклики методу повинні давати той самий результат, за умови, що жодна інформація, яка використовується в порівняннях equals щодо об’єкта, не змінена; для ненульового посилання x , x.