Назад к вопросам
Ozon Fresh
Junior — Middle
71
Объекты, прошедшие сериализацию и последующую десериализацию, сохранят равенство по методу equals()?
Компании, где спрашивали
Ответ от нейросети
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().