【发布时间】:2021-03-06 05:38:07
【问题描述】:
如代码所示,当变量 x 被替换为 list 时,当 ListNode 的新实例被替换为 x.next 时,它同时反映在 x 和 list 上(参考注释 1)。我认为这是因为 x 指的是列表。 但是,当将新实例替换为 x 时,它仅反映在 x 上,而不是列表上(请参阅注释 2)。 你能解释一下为什么会这样吗?
public class Sample {
public static void main(final String[] args) {
final ListNode list = new ListNode(0, null);
ListNode x = list;
//1.ListNode new instance is substituted for both x and list as x refers to list
x.next = new ListNode(1, null);
//2.ListNode new instance is substituted only for x, not list
x = new ListNode(1, null);
}
}
class ListNode {
int data;
ListNode next;
ListNode(final int data, final ListNode next) {
this.data = data;
this.next = next;
}
}
【问题讨论】:
-
因为
ListNode list被声明为final? -
没有最终由IDE自动添加,因为在这种情况下无法更改列表。
标签: java object variables substitution object-oriented-analysis