Java LinkedList 为空不等于等于 null?

问题描述 投票:0回答:1

Lines 160-164 您好,我正在尝试使用 Java 实现最低有效数字基数排序。在第 130 行,我创建了一个链表数组,它将保存排序后的整数,并在第 133 行将每个元素初始化为一个空链表。一切正常,除非我想遍历这个链表数组以替换第 162 行和第 163 行中的原始输入数组。每次我运行此代码时,我都会收到 NoSuchElementException,但是如果我将第 162 行从 (bucket != null) 更改为 (! bucket.isEmpty()),则代码可以完美运行。检查链表头是否等于 null 和检查链表是否为空不是一回事吗? Error

我很困惑为什么检查链表头是否不等于 null 会给我一个错误,而检查链表是否为空却不会给我一个错误。谢谢。

java linked-list radix is-empty
1个回答
1
投票

不,它们在 Java 中不一样。

在 Java 中,变量(非原始类型)默认为

null
,直到您创建或分配对象给它。

所以如果你的方法包含这个:

List<String> myList;

那么你的变量

myList
将是一个“空指针”(空引用),因为你还没有给它分配任何东西。

如果你的方法然后尝试调用这个空指针上的任何方法,比如这样做:

myList.size();

然后你会遭受

NullPointerException
因为
myList
null
所以那里没有对象可以调用
size()
方法。

但是如果您现在为该变量创建一个对象以指向:

myList = new LinkedList();

然后变量将不再是空指针,它现在将是对恰好为空的

List<String>
的引用(因为您还没有向其中添加任何项目)。

所以现在您可以调用

myList.size()
myList.isEmpty()
之类的方法而无需获得
NullPointerException
.

© www.soinside.com 2019 - 2024. All rights reserved.