单链接列表中的副本混淆



假设我们有一个单独的链表1->2->3->4->5,而1head

ListNode newHead = new ListNode(0);
ListNode p = newHead;  
ListNode runner = newHead; 
newHead.next = head; // Line 1 p and runner next is also head
while(n>0){
    runner = runner.next; // Line 2 why newHead and p does not move along with runner just as above because they are equal object (I assume)
    n--;
}

为什么pnewHeadrunner不同时发生变化?在Line 1中他们会,但在Line 2中他们不会,为什么?

假设newHead位于内存位置A
由于将newHead分配给pp现在也指向内存位置A
runner的逻辑相同,指向A

现在您设置了newHead的一些属性,它"更改"了所有三个newHeadprunner的属性,因为它们都指向同一内存位置A中的同一对象。

如果现在编写runner = runner.next,则为runner指定一个新值
现在runner指向存储器位置B

但这对pnewHead来说根本无关紧要,因为它们只指向与runner相同的位置,但没有其他关系。他们只指向同一地点/同一物体。如果你改变了对象,三个人都知道这个改变。但如果你改变了三分之一的位置,那对其他两分来说就无关紧要了。

Java非基元变量只是指向实际对象所在的内存地址的指针/引用。作为开发人员,您不必处理指针可能产生的问题(或访问它们提供的功能)。

相关内容

  • 没有找到相关文章

最新更新