Что произойдет, так это то, что экземпляры класса Demo
будут работать некорректно при использовании в качестве ключей хеш-функции.
Вот один пример того, что произойдет.
Demo demo = new Demo(...);
HashSet<Demo> set = new HashSet<>();
set.add(demo);
System.out.println(set.contains(demo)); // will print false 99.9% of the time.
Другими словами, HashSet
потеряет элементы дорожки с точки зрения метода contains
.(Но они все равно будут там, если вы выполните итерацию набора. И вы, вероятно, сможете добавить один и тот же объект Demo
дважды ..., что приведет к набору, содержащему дубликаты.)