<edited>
Я мав на увазі, що неможливо написати нетривіальний hashCode саме для такого equals як в прикладі, а не в принципі для класу Point.
Проблема побудови хеш коду лежить в нетранзитивності операції. Можна довести, що будь-які дві точки повинні мати однаковий хеш-код, інакше контракт буде порушуватися.
З документації:
If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.
При такій реалізації методу equals яку подано вище, ця вимога буде порушуватися якщо x, y не рівні між собою але в межах похибки (заданої в equals).
Цікавий приклад. В мене на проекті одного разу я чув пропозицію подібно equals реалізувати.
Крім проблеми транзитивності і симетричності тут ще проблема в неможливості реалізувати нетривіальний hashCode (нетривіальний = не «return 0;»).
Взагалі-то він правий, що в тій стрічці помилка. Правильна реалізація obj.getClass() != this.getClass(), а така реалізація як в оригіналі буде неправильно працювати з нащадками.
<deleted>