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