Sobes.tech
Junior — Middle

Behalten Objekte, die serialisiert und anschließend deserialisiert wurden, die Gleichheit nach der Methode equals()?

sobes.tech KI

Antwort von AI

Objekte, die eine Serialisierung und anschließende Deserialisierung durchlaufen haben, garantieren nicht, dass sie nach der Deserialisierung gleich sind im Sinne von equals(), es sei denn, diese Methode wurde speziell überschrieben, um den Inhalt der Objekte zu vergleichen. Standardmäßig vergleicht die Methode equals() in Java (und Android) Referenzen auf Objekte, und nach der Deserialisierung wird ein neues Objekt mit einer anderen Speicheradresse erstellt.

Wenn die Klasse equals() korrekt überschreibt und die internen Felder vergleicht, können die Objekte vor und nach der Serialisierung als gleich angesehen werden. Andernfalls nicht.

Beispiel:

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);
    }
}

In diesem Fall sind nach der Deserialisierung Objekte mit den gleichen Feldwerten gleich im Sinne von equals().