【问题标题】:Java, Why don't self referential classes allocate infinite memory? [duplicate]Java,为什么不自引用类分配无限内存? [复制]
【发布时间】:2021-08-18 10:16:24
【问题描述】:

我正在学习单链表。在下面我提供的示例的第 5 行,是一个调用自引用类的示例。我觉得分配给next 的数量是无限的,因为当Java 编译器评估Node 的大小时,它会递归地遍历第5 行,以确定要为Node 分配多少内存。我对第 5 行有什么误解。

你能解释一下自引用类吗?

next 变量分配了多少内存?

为什么第 5 行有效?我认为无限递归循环是无效的。

【问题讨论】:

  • 请记住,next 是对堆上对象的引用,而不是实际对象本身。
  • 第 5 行没有 call。有一个包含类型(节点)和标识符的声明。它会创建一个嵌套节点吗?不,直到setNext() 被调用。当这种情况发生时,正如 Slaw 所指出的,它只是对现有对象的引用。
  • 想象一所房子,上面有一张纸,上面有地址。那张纸是对另一所房子的参考。第一间房子是否需要无限大才能存放这张纸?不。另请注意,这张纸可能是空白的 - 一个空引用。

标签: java linked-list self-reference class-reference


【解决方案1】:

您在构造函数中分配给“next”的是另一个对象“n”(在本例中为另一个节点)的内存地址。

对象变量只是指向内存堆中真实对象的引用(RAM 中为 JVM 分配的一个段)。

从概念上讲,您可以将其推理为一个坐标、一个数字。还认为'n'可能是'null',这意味着next现在不会引用任何对象。

为了继续帮助您理清思路,您创建的是一个“实例”,其中包含对同一类的另一个“实例”的引用。

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2010-12-26
    • 2021-11-23
    • 1970-01-01
    • 2023-03-07
    • 2014-07-06
    相关资源
    最近更新 更多