在 Java 中更改链表节点的变量值



在下面的代码中,为什么当我将节点变量 2 更改为 null 时,第一个节点变量 1 的下一个值仍然是 2?

public static void main(String[] args) {
Node one = new Node(1);
Node two = new Node(2);
one.next = two;
System.out.println(one.val + ", " + one.next.val); //1, 2
two = null; //one.next.val is still 2
System.out.println(one.val + ", " + one.next.val); //1 ,2
}
static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}

创建时:

Node one = new Node(1);
Node two = new Node(2);

您创建两个Node对象,即Node(1)Node(2)以及两个参考文献(即onetwo(

现在当你这样做时

one.next = two;

您不是在创建任何新对象,而是在创建对Node(2)对象的新引用。

所以现在你有两个对象(Node(1)Node(2)(和三个引用,即onetwoone.next

当你这样做时

two = null;

它会删除引用two。但请注意,您仍然可以通过其第二个引用访问Node(2)对象,即one.next.

您需要将one.next的引用设置为null,以便它不存在。该行

two = null;

将对象 2 设置为指向 null,不再指向具有 val 2 的前一个节点,但它继续存在,并且节点 1 仍指向它。

one.next = null; 

一旦将 one.next 指向 null,就不再引用该对象,并且该对象稍后会丢失并由垃圾回收器收集

相关内容

  • 没有找到相关文章

最新更新