gpt4 book ai didi

java - 对象序列化后,引用是保留还是创建新对象?

转载 作者:行者123 更新时间:2023-11-30 08:03:57 25 4
gpt4 key购买 nike

这听起来像是一个显而易见的问题,但我想知道序列化是否会导致引用另一个对象的对象变成副本而不是引用。

如果我不清楚,请考虑以下代码:

public class Test implements Serializable {
String thing1 = new String("test");
String thing2 = thing1;
public static void main(String[] args) {
//Blah blah implementation
}
public static void serialize() {
try {
FileOutputStream fileoutput = new FileOutputStream(new File("test.ser"));
ObjectOutputStream objectoutput = new ObjectOutputStream(fileoutput);
objectoutput.writeObject(thing2);
objectoutput.close();
fileoutput.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException i) {
i.printStackTrace();
}
}
}

反序列化时,它会作为对 thing1 的引用返回,还是只是一个副本,但不引用它。

最佳答案

序列化的 thing2 确实不可能保留对 thing1 的引用。这是因为序列化过程将 thing2 转换为字节流,表示 thing2 所属类的对象的状态和内容。如果该对象包含其他对象,它们也必须可序列化,以免序列化失败。并且它们的状态依次序列化。

但不会保留对象在序列化时的具体内存地址及其内容。毕竟,序列化对象可以写入一个文件,该文件在序列化该对象的程序停止执行后仍然存在。

反序列化又将字节流转换回具有该序列化状态的该类实例的副本。

所以不,它只是反序列化时的副本,不会保留对其复制来源的相同类型的另一个对象的引用。

关于java - 对象序列化后,引用是保留还是创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com