当一个引用被声明等于另一个引用时,它的指向是什么?初学者参考语义

问题描述 投票:0回答:1

我是一个新的程序员,我正试图理解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时,这个变化就会反映出来?

java object reference semantics
1个回答
1
投票

我的理解是,主方法中的前两行构建了图书引用和图书对象,新创建的对象存储在引用变量中。

不是对象本身,对象的引用是存储在引用变量中的。

还是说,创建的b3引用会直接指向内存中的第二个图书对象?

是的,b2引用会被复制到b3引用中,现在b3引用的是同一个对象。

当执行主方法的第四行时,是不是内存中的图书对象发生了变化,当再次调用b2或b3时,这个变化就会反映出来?

是的,是这样的。

© www.soinside.com 2019 - 2024. All rights reserved.