我正在研究链接列表。我一次又一次地看到代码在该类的主体中声明了类的数据类型。以下是Cracking the coding采访(创建链接列表)一书中的一个例子
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;
}
}
在第二行 - 你可以看到' next'是Node类型的实例变量,是它自己的类。
我的问题是,如果我创建一个Node类的实例(比如说X) -
Node X = new Node(10);
书中说,编译器会自动为其实例变量(数据和下一个)保留空间,即使它们没有被启动。 (int data = 10)在构造函数中清楚地处理,但接下来会发生什么?在我看来,就像X将拥有无限数量的“下一个”'其中的节点,因为X将在其中有一个名为next的节点。然后,因为每个节点都应该有一个数据和下一个部分,然后下一个将拥有自己的数据副本,然后在其中,依此类推......等等... ... p>
答案 0 :(得分:6)
“下一个”节点只是Node对象的引用。保留空间以引用该节点的事实并不意味着使用子节点创建了一个全新的节点,这只意味着原始节点有足够的“空间”来存储引用到另一个节点。由于'next'最初具有null引用,因此在初始化Node并在'next'中存储对它的引用之前,“没有任何东西”。
基本上,节点的引用与节点不同。
有关详细信息,请参阅Oracle's Documentation on Types, Values and Variables。