在下面的代码中,为什么当我将节点变量 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)
以及两个参考文献(即one
和two
(
现在当你这样做时
one.next = two;
您不是在创建任何新对象,而是在创建对Node(2)
对象的新引用。
所以现在你有两个对象(Node(1)
和Node(2)
(和三个引用,即one
,two
和one.next
。
当你这样做时
two = null;
它会删除引用two
。但请注意,您仍然可以通过其第二个引用访问Node(2)
对象,即one.next
.
您需要将one.next的引用设置为null,以便它不存在。该行
two = null;
将对象 2 设置为指向 null,不再指向具有 val 2 的前一个节点,但它继续存在,并且节点 1 仍指向它。
one.next = null;
一旦将 one.next 指向 null,就不再引用该对象,并且该对象稍后会丢失并由垃圾回收器收集