Почему два объекта не равны после сохранения с сериализуемым - PullRequest
0 голосов
/ 14 февраля 2020

publi c class ProveSerialization {publi c stati c void main (String [] args) создает исключение {

        Save obj = new Save();
        obj.a = 4;

        File f = new File("File.txt");
        FileOutputStream fos = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(obj);


    FileInputStream fis = new FileInputStream(f);
    ObjectInputStream ois = new ObjectInputStream(fis);
    Save obj1 = (Save) ois.readObject();

    System.out.println(obj1.a);
    System.out.println(obj);
    System.out.println(obj1);
    System.out.println(obj.equals(obj1));
    System.out.println(obj == obj1);

OutPut: 4 Save@14ae5a5 Save@6d03e736 false false

1 Ответ

0 голосов
/ 14 февраля 2020

Проверить реализацию equals в классе Object; он сравнивает идентичность двух объектов, что может быть истинным, только если два объекта занимают одно и то же пространство в памяти. Однако, сериализуя ваш объект, вы фактически создаете новый (что вполне нормально, поскольку вы можете даже намереваться обмениваться сериализованным объектом между двумя виртуальными машинами. В результате сериализованный объект никогда не может быть тем же как это было раньше.

Однако, если вы намереваетесь ослабить определение equals для вашего Save объекта, имейте в виду, что вы можете переопределить метод. Но я думаю, что это OT, верно

...