Встречается на собеседованиях • сегодня

Должна ли оставаться консистенция после изменения значения при использовании 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) эта проблема не возникает.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы