Sobes.tech
Назад к вопросам
Junior — Middle
71

Объекты, прошедшие сериализацию и последующую десериализацию, сохранят равенство по методу equals()?

Компании, где спрашивали
Ozon FreshOzon Fresh

Ответ от нейросети

sobes.tech AI

Объекты, прошедшие сериализацию и последующую десериализацию, не гарантируют сохранение равенства по методу equals(), если этот метод не переопределён специально для сравнения содержимого объектов. По умолчанию метод equals() в Java (и Android) сравнивает ссылки на объекты, а после десериализации создаётся новый объект с другим адресом в памяти.

Если класс правильно переопределяет equals() и сравнивает внутренние поля, то объекты до и после сериализации могут считаться равными. В противном случае — нет.

Пример:

class Person implements Serializable {
    String name;
    int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

В этом случае после десериализации объекты с одинаковыми значениями полей будут равны по equals().