在下面的代码中,当我将节点变量2更改为null时,第一个节点变量one的下一个值为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;
}
}
答案 0 :(得分:0)
您需要将one.next的引用设置为null,以使其不存在。线
two = null;
将对象2设置为指向null,并且不再指向具有val 2的上一个节点,但是该对象继续存在,并且一个节点仍然指向它。
one.next = null;
将one.next指向null之后,便不再有对该对象的引用,并且该对象会在以后由垃圾收集器丢失和收集
答案 1 :(得分:0)
创建时:
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
对象。