假设我们有一个单独的链表1->2->3->4->5
,而1
是head
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--;
}
为什么p
、newHead
和runner
不同时发生变化?在Line 1
中他们会,但在Line 2
中他们不会,为什么?
假设newHead
位于内存位置A
由于将newHead
分配给p
,p
现在也指向内存位置A
与runner
的逻辑相同,指向A
。
现在您设置了newHead
的一些属性,它"更改"了所有三个newHead
、p
和runner
的属性,因为它们都指向同一内存位置A
中的同一对象。
如果现在编写runner = runner.next
,则为runner
指定一个新值
现在runner
指向存储器位置B
。
但这对p
和newHead
来说根本无关紧要,因为它们只指向与runner
相同的位置,但没有其他关系。他们只指向同一地点/同一物体。如果你改变了对象,三个人都知道这个改变。但如果你改变了三分之一的位置,那对其他两分来说就无关紧要了。
Java非基元变量只是指向实际对象所在的内存地址的指针/引用。作为开发人员,您不必处理指针可能产生的问题(或访问它们提供的功能)。