Встречается на собеседованиях • сегодня
Должна ли оставаться консистенция после изменения значения при использовании equals
Если equals() возвращает true для двух объектов, изменение одного из них не должно влиять на равенство, иначе нарушается контракт equals().
Пример нарушения:
java
class MutableKey {
private int value;
public MutableKey(int value) { this.value = value; }
text
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
return value == ((MutableKey) o).value;
}
// hashCode() также должен учитывать value}
MutableKey k1 = new MutableKey(1);
MutableKey k2 = new MutableKey(1);
System.out.println(k1.equals(k2)); // true
k1.value = 2; // изменяем состояние
System.out.println(k1.equals(k2)); // false - нарушение консистентности
text
Для mutable-объектов лучше избегать использования в качестве ключей в HashMap/HashSet. Для immutable-объектов (например, String, Integer) эта проблема не возникает.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы