从数据文件加载已保存的序列化对象时,我遇到变量引用问题。引用同一对象的所有变量似乎都没有随着更改而更新。我在下面编写了一段代码来说明问题。
Tournament test1 = new Tournament();
Tournament test2 = test1;
try {
FileInputStream fis = new FileInputStream("test.out");
ObjectInputStream in = new ObjectInputStream(fis);
test1 = (Tournament) in.readObject();
in.close();
}
catch (IOException ex){
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
}
catch (ClassNotFoundException ex){
Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("test1: " + test1);
System.out.println("test2: " + test2);
运行此代码后,test1 和 test2 不再引用同一对象。据我所知,他们应该这样做,因为在 test2 的声明中它引用了 test1。当 test1 更新时,test2 应该反射(reflect)更改并在代码中调用时返回新对象。我是否在这里遗漏了一些重要的东西,或者我是否错误地了解了 Java 中的变量引用如何工作?
最佳答案
Am I missing something essential here or have I been misstaught about how the variable references in Java works?
很可能您误解了所学的内容,或者所学的内容是错误的。所有引用类型(即非原始类型)的变量直接
引用一个对象。
Tournament test1 = new Tournament();
创建 Tournament
的新实例并让 test1
引用它。
Tournament test2 = test1;
将引用从 test1
复制到 test2
,使它们都引用同一个对象。
test1 = (Tournament) in.readObject();
使 test1
引用已从流中反序列化的不同对象,而 test2
仍引用原始对象。
关于java - Java从文件加载对象时的变量引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647349/