在不显式更改其引用的情况下更改引用
Having a reference be changed without explicitly changing its reference
在过去的一年里,我一直在学习 Java 并且我已经相当精通数据结构,但是有一些事情一直在我脑海中,但我一直没有完全弄清楚。下面是一个例子:
public class SList{
private SListNode head;
private int size;
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head;
while (node.next != null) {
node = node.next;
}
node.next = new SListNode(obj);
}
size++;
}
假设 SListNode 和 SList 构造函数都已实现,为什么 "head" 引用发生变化并在其末尾添加了一个节点,而没有像 head = node; 这样的声明;在方法的最后?我知道这可能是非常基本的,但我一直在寻找一段时间,但一直没有解释。
SListNode node = head;
在这一行中,node
开始指向与 head
相同的对象。所以当你用 node
做某事时,你正在通过 link 改变对象本身。所以请记住,在 java 中,所有内容都是指针,以便了解您在哪里做错了。
总的来说,我认为你想收到这样的东西(只是带有主要思想的启动示例):
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head.next;
if (node != null {
while (true) {
node = node.next;
if (node == null)
break;
}
}
node = new SListNode(obj);
}
size++;
}
在过去的一年里,我一直在学习 Java 并且我已经相当精通数据结构,但是有一些事情一直在我脑海中,但我一直没有完全弄清楚。下面是一个例子:
public class SList{
private SListNode head;
private int size;
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head;
while (node.next != null) {
node = node.next;
}
node.next = new SListNode(obj);
}
size++;
}
假设 SListNode 和 SList 构造函数都已实现,为什么 "head" 引用发生变化并在其末尾添加了一个节点,而没有像 head = node; 这样的声明;在方法的最后?我知道这可能是非常基本的,但我一直在寻找一段时间,但一直没有解释。
SListNode node = head;
在这一行中,node
开始指向与 head
相同的对象。所以当你用 node
做某事时,你正在通过 link 改变对象本身。所以请记住,在 java 中,所有内容都是指针,以便了解您在哪里做错了。
总的来说,我认为你想收到这样的东西(只是带有主要思想的启动示例):
public void insertEnd(Object obj) {
if (head == null) {
head = new SListNode(obj);
} else {
SListNode node = head.next;
if (node != null {
while (true) {
node = node.next;
if (node == null)
break;
}
}
node = new SListNode(obj);
}
size++;
}