在不明确更改其引用的情况下更改引用

时间:2015-01-05 18:56:25

标签: java reference private instance-variables

过去一年我一直在学习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这样的声明的情况下将Node添加到其末尾;在方法的最后?我知道这可能是非常基本的,但我一直在寻找一段时间,从来没有一个解释。

1 个答案:

答案 0 :(得分:1)

SListNode node = head;

在这一行node开始指向与head相同的对象。因此,当您使用node执行某些操作时,您将通过链接更改对象本身。所以请记住,在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++;
  }