为什么在 LinkedList 实现中不将当前引用和 head 引用视为彼此的别名?

Why are current and head references not considered aliases of each other in LinkedList implementation?

提问人:Jiya varma 提问时间:8/30/2022 最后编辑:Federico klez CullocaJiya varma 更新时间:8/30/2022 访问量:26

问:

请考虑 Linked List 类中的以下 addToBack 方法

public void addToBack(int data) {
    Node newNode = new Node(data);
    if (head == null) {
        head = newNode; 
    }
    else {
        Node curr = head; //this is what I'm hung up on
        while (curr.next != null) {
            curr = curr.next;
        }
        curr.next = newNode;
    }
}

为什么 current 和 head 在这里不是别名?我认为,如果两个引用指向同一个对象,那么它们就是别名,改变一个的内容也会改变另一个。那么,当将 head 分配给 current,并在 while 循环中将 current 重新分配给 current.next 时,为什么 head 没有也改变呢?

顺便说一句,我在这里看到了一个类似的问题:为什么操作 LinkedList 节点别名允许此方法工作?,但不明白关于为什么 head 和 current 而不是别名的解释。

Java 按引用传递

评论

2赞 Federico klez Culloca 8/30/2022
但是你正在重新分配一个不同的值,这意味着你不再让它指向同一个对象,所以它们不再是“别名”curr
0赞 Jiya varma 8/30/2022
啊,我明白了。如果我在 Node curr = head; 之后做了类似 curr.data = 5 的事情,那么 head 和 curr 会是别名吗?从而导致 head.data 也变为 5?
0赞 Federico klez Culloca 8/30/2022
是的,因为到那时仍然指向同一个对象。currhead

答: 暂无答案