Java LinkedList 为空不等同于等于 null?[关闭]

Java LinkedList being empty is not the same as being equal to null? [closed]

提问人:Omar Ibrahim 提问时间:3/28/2023 最后编辑:vimuthOmar Ibrahim 更新时间:3/28/2023 访问量:151

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

8个月前关闭。

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

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

java 链接列表 基数 为空

评论

6赞 Old Dog Programmer 3/28/2023
你好。欢迎使用 Stack Overflow。请编辑问题,以文本形式显示代码和错误消息,而不是图像。
6赞 teapot418 3/28/2023
“检查 LinkedList 标头是否等于 null 与检查链表是否为空是一回事吗?”事实并非如此。空 = 空瓶。Null = 无瓶子。里面有什么都没有的容器(瓶子、袋子等)和什么都没有是有区别的。
1赞 teapot418 3/28/2023
如果您更喜欢图像...
2赞 Christian Bongiorno 3/28/2023
虽然它没有直接回答你的问题,但我不会使用我会使用 List,因为它会更容易使用。您甚至可以使用流来设置默认值:请参阅此示例 geeksforgeeks.org/stream-generate-method-javaList<Integer>[]<List<Integer>>List<List<Integer>> foo = Stream.generate(ArrayList::new)
1赞 markspace 3/28/2023
如果你是一个 C 程序员,这更容易理解。 是只有引用才能具有的值。在 C 中,它在数值上通常等于零。如果调用,则具有对对象的引用,并且此引用永远不会等于 。如果调用引用,则不会得到 true 或 false,而是会得到 NullPointerException。nullnewnulllist.isEmpty()null

答:

1赞 Bobulous 3/28/2023 #1

不,它们在 Java 中是不一样的。

在 Java 中,变量(非原始类型)默认为 Until 您为其创建对象或为其分配对象。null

因此,如果您的方法包含以下内容:

List<String> myList;

那么你的变量将是一个“空指针”(空引用),因为你还没有给它赋值任何东西。myList

如果方法随后尝试在此 null 指针上调用任何方法,例如执行以下操作:

myList.size();

然后你会遭受一个 because is 并且那里没有对象可以调用该方法。NullPointerExceptionmyListnullsize()

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

myList = new LinkedList();

然后,该变量将不再是空指针,它现在将是对恰好为空的 A 的引用(因为您尚未向其中添加任何项目)。List<String>

所以现在你可以调用一些方法,比如 and,而不用得到一个 .myList.size()myList.isEmpty()NullPointerException