Junior — Middle
Обектите, преминали през сериализация и последваща десериализация, ще запазят равенството по метода equals() ли?
sobes.tech AI
Отговор от 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().