我正在尝试使用《Java 中的数据结构和算法》一书再次学习 Java,在第 191 页中,该书实现了链接列表。代码首先构建了一个链接类、一个链接列表类和一个客户端类linkapp。
public class Link {
public int data;
public link next;
public Link (int newdata){
data=newdata;
}
}
public class Linklist {
public Link first;
public void insertFirst(int data){
Link newlink=new Link (data);
newlink.next=first;
first=newlink;
}
public boolean isEmpty(){ return (first==null); }
public void displaylist(){
if (!isEmpty()){
Link current=first;
while(current!=null){
System.out.print(current.data);
current=current.next;}
}
}
}
public class LinklistApp {
public static void main(String[] args) {
Linkedlist linkList = new Linkedlist();
linkList.insertFirst(3);
linkList.insertFirst(4);
linkList.insertFirst(5);
linkList.displaylist();
}
}
但是我不明白为什么在linklist类中的insertFirst方法中本地创建的链接对象可以通过displaylist方法访问。当方法退出时,局部变量将消失,因为它们只是中间结果。那么 displaylist 方法如何仍然可以访问这些链接对象呢?
最佳答案
insertFirst
中的 newlink
变量的值被复制到此处的 instance 变量中:
first=newlink;
然后在 displayLink
中,first
的值被复制回局部变量:
link current=first;
区分变量及其值以及引用和对象很重要。所有这些link
变量的值仅供引用。
(顺便说一句,这个例子是直接从书本中取出来的吗?如果是这样,我担心使用非常规名称,例如 link
而不是 Link
一个类,并使用 newlink
而不是 newLink
作为变量。)
关于Java局部对象变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292043/