繁体   English   中英

更改对对象 java 的引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM