Sobes.tech
Junior — Middle

Объектҳое, ки пас аз сериалӣ ва десериалӣ гузаронида шудаанд, баробариро бо усули equals() нигоҳ медоранд?

sobes.tech AI

Ҷавоб аз AI

Объектҳо, ки пас аз сериализатсия ва десериализатсия гузаронида шудаанд, кафолат намедиҳанд, ки баробарии онҳоро бо усули equals() нигоҳ доранд, агар ин усул махсус барои муқоиса кардани мазмуни объектҳо навишта нашуда бошад. Дар Java (ва Android) усули equals() одатан ба суроғаҳои ишораҳои объектҳо муқоиса мекунад, ва пас аз десериализатсия, объект нав бо суроғаи дигар дар хотира сохта мешавад.

Агар синф дуруст 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() баробар ҳисоб мешаванд.