java - Java 中的对象引用 - 链表
问题描述
我的印象是创建一个变量并将其设置为一个对象将充当一个引用,即。更改原始对象随后也会“更改”变量。我具体指的代码如下:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
...
ListNode l1 = ... // l1 is an input
ListNode iterator = head; // copying l1 into a new list, starting with 'head'
...
iterator.next = l1;
l1 = l1.next;
最后一段代码循环多次。为什么当我们设置 时iterator.next = l1
,它充当的是复制 'l1' 对象,而不是创建对 l1 的引用?结果不应该只是一堆 l1 的副本,而不是在每个步骤中吗?
解决方案
你指的是指针。当您创建指向现有对象的新指针时,它不会更新原始对象的指针。
例如:
ListNode l1 = ...
ListNode iterator = ...
iterator.next = l1
在这种情况下,iterator.next
指向同一个对象l1
。l1
如果我然后使用以下行更改指针:
l1 = l1.next
l1
这里改变了,意思是指针,而不是对象。我可以为同一个对象创建任意数量的指针:
Object a = ...
Object b = a
Object c = a
Object d = a
所有这些指针(a、b、c、d)都指向同一个对象,我可以互换使用它们,但是如果我将其中一个指针更改为指向不同的对象:
b = new Object();
b 不再指向同一个对象,但这不会改变 a、c 或 d。这些都指向同一个原始对象。