“object = this”in java
我熟悉java中使用的'this'关键字,它用于引用当前对象。下面这段代码显示了一个链表的节点如何被创建:“object = this”in java
class Node {
Node next = null;
int data;
public Node(int d) {
data = d;
}
void appendToTail(int d) {
Node end = new Node(d);
Node n = this;
while (n.next != null) {
n = n.next;
}
n.next = end;
}
}
但在这里我不知道在什么上面下面的代码行指出:
Node n = this;
我敢确定这里的'this'被引用到当前对象,但是这个对象的头部,尾部还是LinkedList中的任何其他节点?不知道我的问题是否合理,但非常感谢任何帮助。
我假设appendToTail(int d)
方法将新创建的节点追加到列表的末尾,而不管它从哪个节点调用。
会发生什么事情是,必须找到列表的末尾才能将新节点附加到列表的末尾。由于我们知道它被调用的节点在列表中,因此这是一个理想的起点。因此我们选择起点作为“这个”节点。但是,这个节点不一定是列表的末尾(实际上它可能在列表中的任何地方),所以我们将它存储在一个临时变量Node n = this
中,并继续更改我们的临时变量,直到它到达列表中的最后一个节点为止新节点可以被添加。
它相当于从一个列表中的随机点(this)开始,并从该点移动到结束点,无论它在哪里。
希望这回答了你的问题。
我敢肯定,“这个”这里是参照当前对象
是啊。
但是这个对象的头部,尾部或LinkedList中的任何其他节点?
这取决于从哪里调用该方法,或者该列表是否包含this
节点。
所有的方法都是为当前节点分配一个临时引用,以便它可以迭代。没有更多信息,你不能说哪个节点。
从评论 - 如果你的头叫appendToTail(),这将是头。如果你在尾巴上叫它,这将是尾巴。如果你在中间节点上调用它,这将是该中间节点。
感谢您的帮助!你的回答非常有用:) – Aiguo
'Node n'声明一个类型为'Node'的变量'n'。 '= this'用'this'初始化变量'n',它也是'Node'类型。所以,在这条指令之后,'n'和'this'是对同一个对象的两个引用。头和尾是无关紧要的。我不明白“LinkedList中的头部或任何节点是什么?”手段。 –
@JBNizet,只是改正了错字。我的意思是我们引用'this'关键字,还是仅仅是对一个节点的引用? – Aiguo
当调用appendToTail时,'n'将具有与类(实例)相同的值。在这种情况下,它可以在当前实例上执行while循环。这与其他任何课程没有什么不同。 –