重新分配对象引用时出现意外输出

Unexpected output on re-assigning an object-reference

我正在学习 OOP,并获得了一些关于创建对象引用和检查结果的作业。我有一个 Book class 和一个 BookTest class,在 BookTest class 中我对 [=13= 进行了 4 个对象引用] 对象。

一个 Book 有一个名字,以及一个函数来获取那本书的名字。

class Book {
    private String name;

    public Book(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

Book 对象的引用如下所示:

Book b1 = new Book("The story of ...");
Book b2 = b1;
Book b3 = new Book("Second story");
Book b4 = new Book("Third story");

这一切都很好,每当我打印出 b2.getName() 时,我都会得到预期的 "The story of ..." 字符串。

但是每当我在打印 b2.getName() 行之前添加这一行时:

b1 = b3;

我预计 b2.getName()"Second story",因为 b1 已分配给 b3。它实际上仍然是 "The story of ..." 字符串。

这是为什么?

你理解错了。

如果你这样做:

b2=b1;

然后:

b1=b3;

b2 仍然是 b1:

之前的引用
Book b1 = new Book("The story of ...");
Book b1 = new Book("The story of ...");
Book b2 = b1;
Book b3 = new Book("Second story");
Book b4 = new Book("Third story");

b1 = b3; 之后,b1 引用转到 b3 而不是 b2。

我希望这对理解有所帮助。