Sobes.tech
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().