java - Java从文件加载对象时的变量引用问题

标签 java reference variables load serializable

从数据文件加载已保存的序列化对象时,我遇到变量引用问题。引用同一对象的所有变量似乎都没有随着更改而更新。我在下面编写了一段代码来说明问题。

    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/

相关文章:

java - 无法显示计算结果

css - SCSS : if my variable has a numerical increment, 如何循环访问它?

python - 赋值前引用的局部变量 "age"

regex - 如何改变氚变量字符串?

java - java中封装的清晰性

java - 使用本地模拟器测试 PubsubIO 读取

java - 保存时需要将帧作为图像保存在指定文件夹中

php - PHP 中的 ArrayAccess——通过引用分配给偏移量

java - java中将数据复制到引用中(缺少指针问题)

jQuery:如何遍历多个对象并使属性与项目的标题相同?