[英]Changing references to Objects java
CCI 书中的代码:
public class ListNode {
int val;
ListNode next = null;
ListNode(int x) {
this.val = x;
}
和这个:
public void appendToTail(int d) {
ListNode end = new ListNode(d);
ListNode n = this;
while (n.next != null) {
n = n.next;
}
n.next = end;
}
原始:5 -> 10 -> 15
据我了解,在这种情况下,“n”和“this”指的是同一个对象,经过调试和逐步完成:
"n" 变为 15 -> 20
“这个”变成 5 -> 10 -> 15 -> 20
怎么会这样? 当我改变“n”时,“this”也应该改变?
所以我在“n”上所做的一切,除了附加 20,都没有反映在“this”上。
更新:
任何有同样问题的人都应该阅读这个。
在你的 while 循环中,你说:
n = n.next
当该行代码执行时,您将 n 的值从“this”更改为 n.next。 这指向列表中的当前链接对象,而 next 指向一个完全不同的对象。 当您遍历链表时,n 的值会随着您遍历链表中的每个链接而不断更新。
当您到达链表的末尾时,没有下一个,即 n 的值为空。 所以你退出 while 循环并在链表的末尾添加一个新链接。
来自Java 语言规范:
[...] 关键字
this
表示一个值,该值是对调用实例方法或默认方法的对象的引用 [...]
您只在列表的一个特定节点上调用appendToTail(int)
,因此this
总是指向同一个对象。 如果要在调试期间“步入”每个节点,可以按如下方式更改实现:
public void appendToTail(int d) {
if (next != null) {
next.appendToTail(d);
} else {
next = new ListNode(d);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.