在不显式更改其引用的情况下更改引用

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++;
  }