【问题标题】:Java - What happens when we create a data type of type class in its own class?Java - 当我们在自己的类中创建类型类的数据类型时会发生什么?
【发布时间】:2014-11-27 18:04:32
【问题描述】:

我正在研究链表。我一次又一次地看到在该​​类的主体中声明类的数据类型的代码。这是《Cracking the coding interview (create a linked list)》一书中的一个例子

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 类型的实例变量,是它自己的类。

我的问题是,如果我创建类节​​点的实例(比如 X) -

Node X = new Node(10);

书上说编译器会自动为其实例变量(数据和下一个)保留空间,即使它们没有启动。 (int data = 10) 显然是在构造函数中处理的,但是接下来会发生什么?在我看来,X 内部将有无限数量的“下一个”节点,因为 X 内部将有一个名为 next 的节点。然后由于每个节点都应该有一个数据和下一部分,那么下一个将有自己的数据副本和下一个在里面,依此类推……导致这样的事情……

【问题讨论】:

  • 下一个引用是null,这是另一种表示不是值的方式。

标签: java class object linked-list instance


【解决方案1】:

“下一个”节点只是对节点对象的引用。为该节点的引用保留空间这一事实并不意味着使用子节点创建一个全新的节点,它只是意味着原始节点有足够的“空间”来存储 引用到另一个节点。由于 'next' 最初具有对 null 的引用,因此在您初始化 Node 并将对它的引用存储在 'next' 中之前,“什么都没有”。

基本上,对节点的引用与节点不同。

更多信息请参见Oracle's Documentation on Types, Values and Variables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    相关资源
    最近更新 更多