Java 为什么使用serializable保存后两个对象不相等

Java 为什么使用serializable保存后两个对象不相等,java,equals,serializable,Java,Equals,Serializable,输出: public class ProveSerialization { public static void main(String[] args) throws Exception{ Save obj = new Save(); obj.a = 4; File f = new File("File.txt"); FileOutputStream fos = new FileOutputS

输出:

public class ProveSerialization {
    public static void main(String[] args) throws Exception{
    
        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);

检查对象类中
equals
的实现;它比较两个对象的身份,只有当两个对象在内存中占据相同的空间时,这才是真的。但是,通过序列化对象,您可以有效地创建一个新的对象(这很好,因为您甚至可能打算在两个VM之间交换序列化对象。因此,序列化对象永远不会与以前相同


但是,如果您打算为您的
Save
对象放宽
equals
的定义,请记住您可以重写该方法。但我想,这是OT,对吗?

您可以发布完整的程序吗?什么
mySaveObj.equals(另一个saveobj)
很大程度上取决于如何(或如果)它在
Save
中有定义,我认为
等于
的问题(可能没有定义)正是感知行为的原因。
4
Save@14ae5a5
Save@6d03e736
false
false