【问题标题】:Dummy head declaration [closed]假人头声明[关闭]
【发布时间】:2021-04-15 07:04:24
【问题描述】:

Dummy 用于记录初始头部的位置。 为什么我们必须将虚拟头设置为Node dummy = new Node(0) 而不是Node dummy = null。 (这样做我得到了 NPE)。我们不只需要返回头部位置吗?为什么要用值设置 dummy?

【问题讨论】:

  • "这样做会导致 NPE" - NPE 不是由声明引起的,而是通过访问 null 变量上的属性/方法引起的。

标签: java dummy-variable


【解决方案1】:

这一切都归结为 java 中的“null”是什么,以及“实例化”一个对象意味着什么。当您将虚拟头设置为:

Node dummy = new Node(0);

您正在实例化一个新的 Node 对象,该对象分配在堆空间中,对它的引用被传递到“虚拟”变量中。

当你设置一个假人头时:

Node dummy = null;

您没有实例化新的 Node 对象,因此没有新对象添加到堆中。根据定义,如果没有实际创建新对象,就无法引用它。这就是 null ,基本上它意味着一个空引用,或者对不存在的东西的引用(同样的东西)。因为它还没有被实例化,所以当你尝试引用它的字段时,你会得到一个 NullPointerException。

根据文档(如下链接),在以下情况下会引发空指针异常:

  • 调用空对象的实例方法
  • 访问或修改空对象的字段
  • 把 null 的长度当作一个数组来处理
  • 像数组一样访问或修改 null 的槽
  • 将 null 当作可抛出的值进行抛出

您没有发布实际导致 NPE 的代码,但我想这是上面列表中最重要的两个原因之一。

https://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 2015-08-08
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多