首页 > 解决方案 > 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 的副本,而不是在每个步骤中吗?

标签: java

解决方案


你指的是指针。当您创建指向现有对象的新指针时,它不会更新原始对象的指针。

例如:

ListNode l1 = ...
ListNode iterator = ...

iterator.next = l1

在这种情况下,iterator.next指向同一个对象l1l1如果我然后使用以下行更改指针:

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。这些都指向同一个原始对象。


推荐阅读