我是一个新的程序员,我正试图理解Java中的引用语义。我对下面的代码有一些疑问......
public class Library {
public void checkOut(Book b) {
…
//assume that field of b is changed that
//shows book is checked out
}
public static void main(String [] args) {
Book b1 = new Book(…);
Book b2 = new Book(…);
Book b3 = b2;
b3.setName(“Inferno”);
Library l = new Library();
l.checkOut(b2);
if (b3.isCheckedOut()) {
…
} else {
…
}
}
}
我理解主方法中的前两行是构造图书引用和图书对象,新创建的对象存储在引用变量中。
我的问题是,主方法的第三行是如何工作的?是创建新的引用b3,并指向内存中指向第二个图书对象的b2引用?还是说创建的b3引用会直接指向内存中的第二个图书对象?
当执行主方法的第四行时,是不是内存中的图书对象发生了变化,当再次调用b2或b3时,这个变化就会反映出来?
我的理解是,主方法中的前两行构建了图书引用和图书对象,新创建的对象存储在引用变量中。
不是对象本身,对象的引用是存储在引用变量中的。
还是说,创建的b3引用会直接指向内存中的第二个图书对象?
是的,b2引用会被复制到b3引用中,现在b3引用的是同一个对象。
当执行主方法的第四行时,是不是内存中的图书对象发生了变化,当再次调用b2或b3时,这个变化就会反映出来?
是的,是这样的。