为什么两个对象在我用可序列化保存后不相等


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

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

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

最新更新