Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<P> set = new HashSet<>();
set.add(new P());
set.add(new P());
System.out.println(set.size() + " " + new P().equals(new P()));
}
}
class P { @Override public boolean equals(Object o) { return o instanceof P; } }2 true
- Ждать
1 true:HashSetсначала сравнивает хеш-коды и вызываетequalsтолько при совпадении; без своегоhashCodeони разные, и остаются оба объекта. - Ждать ошибку компиляции: Java не заставляет переопределять
hashCodeвместе сequals; нарушенный контракт компилируется и тихо ломается при запуске.
- Что должен вернуть
hashCodeдля двух объектов, равных поequals? - Могут ли два неравных объекта иметь одинаковый хеш-код?