【问题标题】:Why we can use Node head = null without instantiate the 'head' in Java?为什么我们可以使用 Node head = null 而无需在 Java 中实例化“head”?
【发布时间】:2016-11-03 20:52:58
【问题描述】:

我正在阅读某人的代码。它是关于获取输入数字并将这些数字转换为链接列表。部分代码是这样的:

class Node {
    int value;
    Node next;
    Node() {
        next = null;
    }
}

首先,我们需要创建一个head 节点来指示头部,我们让head 像这样为空Node head = null

我有限的java经验告诉我head在这里应该是一个Node类型的对象。那么为什么我们可以使用Node head = null而不实例化head呢?

我认为至少我应该创建 Node head = new Node();那么我们可以使用 Node head = null;

谁能给我解释一下?

【问题讨论】:

  • 为什么在将null 分配给引用之前需要一个对象?
  • 这个赋值没有意义,nullObject 类型字段的默认值。
  • Oracle 为类和对象提供了有用的信息和教程。看起来您应该阅读它们,以了解您的代码的工作方式和原因:docs.oracle.com/javase/tutorial/java/javaOO/index.html

标签: java linked-list nodes


【解决方案1】:
Node head = null;

这一行表明链表中没有项目。这在 Java 中是有效的,表明虽然 head 可以包含 Node 对象(或派生类的对象),但它目前是空的。

要将一个项目添加到列表中,可能有一些代码,例如:

public void addItemToLinkedList(int value) {
    if (head == null) {
        head = new Node();
        head.value = value;
    } else {
        ...
    }
}

因此,如果没有第一个节点(当 head 等于 null 时),则创建 head。否则,如果 head 已经存在,则执行 else 块,该块将查找列表的末尾并添加另一个节点。

【讨论】:

  • 为什么head不用实例化就可以使用Node作为它的数据类型?
  • 这只是表示head 可以包含Node 类型的对象(或派生自Node),但它也可以为空——null 表示它为空。把head 想象成一个邮箱。它可以包含字母,也可以为空。
  • 好的,如果我说 Node 有人 = null;这意味着某人可以包含 Node 类型的对象。不代表某人是Node对象?
  • 是的。直到你说Node someone = new Node();Node someone = someoneelse;,其中someoneelse 是一个实例化的Node 对象。
  • 好的,我明白了。非常感谢杰森。
【解决方案2】:

head这里应该是Node类型的对象

这是可选的。 Java 允许head 成为Node 对象,或null,表示head 根本没有引用任何节点。

null 的值在 Java 中是特殊的。它被允许去任何物体可以去的地方。它表示您分配给null 的变量为空。这很好,假设您的程序的其余部分处理空值检查。

【讨论】:

  • 所以如果 Java 允许 head 是 Node 对象,那么 tail 也可以是 Node 对象,对吧? prev 和 next 怎么样,它们也可以是 Node 类型吗?有没有我可以阅读的关于 Java 中的 Node 对象的文档?谢谢。
  • @Jeffery "有没有我可以阅读的关于 Java 中 Node 对象的文档" 我不这么认为,因为Node 是你自己的类(所以没有其他类页面知道)。但是我已经链接了来自 Oracle 的关于通用类和对象的帮助页面。它也可能对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多