为啥我用可序列化保存后两个对象不相等
Posted
技术标签:
【中文标题】为啥我用可序列化保存后两个对象不相等【英文标题】:Why two object are not equals after i save with serializable为什么我用可序列化保存后两个对象不相等 【发布时间】:2020-05-30 07:29:30 【问题描述】: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);
输出:
4
Save@14ae5a5
Save@6d03e736
false
false
【问题讨论】:
你能发布一个完整的程序吗?mySaveObj.equals(anotherSaveObj)
的作用很大程度上取决于Save
中如何(或是否)定义它
【参考方案1】:
检查Object类中equals
的实现;它比较两个对象的identity,只有当这两个对象在内存中占据相同的空间时才会成立。但是,通过序列化您的对象,您可以有效地创建一个新对象(这很好,因为您甚至可能打算在两个 VM 之间交换您的序列化对象。因此,序列化对象永远不会相同 和以前一样。
但是,如果您打算为您的 Save
对象放宽 equals
的定义,请记住您可以覆盖该方法。不过我猜,那是OT吧?
【讨论】:
我相信equals
的问题(可能没有定义)正是感知行为的原因。以上是关于为啥我用可序列化保存后两个对象不相等的主要内容,如果未能解决你的问题,请参考以下文章