提问人:Omar Ibrahim 提问时间:3/28/2023 最后编辑:vimuthOmar Ibrahim 更新时间:3/28/2023 访问量:151
Java LinkedList 为空不等同于等于 null?[关闭]
Java LinkedList being empty is not the same as being equal to null? [closed]
问:
您好,我正在尝试使用 Java 实现最低有效数字基数排序。在第 130 行,我创建了链表数组,该数组将保存排序后的整数,并将每个元素初始化为第 133 行的空链表。一切正常,除非我想遍历这个链表数组以替换第 162 行和第 163 行中原始输入数组中的元素。每次运行此代码时,我都会收到一个 NoSuchElementException,但是,如果我将第 162 行从 (bucket != null) 更改为 (! bucket.isEmpty()),则代码可以完美运行。检查 LinkedList 标头是否等于 null 与检查链表是否为空是一回事吗?错误
我很困惑为什么检查链表标题是否不等于 null 会给我一个错误,而检查链表是否为空不会给我一个错误。谢谢。
答:
不,它们在 Java 中是不一样的。
在 Java 中,变量(非原始类型)默认为 Until 您为其创建对象或为其分配对象。null
因此,如果您的方法包含以下内容:
List<String> myList;
那么你的变量将是一个“空指针”(空引用),因为你还没有给它赋值任何东西。myList
如果方法随后尝试在此 null 指针上调用任何方法,例如执行以下操作:
myList.size();
然后你会遭受一个 because is 并且那里没有对象可以调用该方法。NullPointerException
myList
null
size()
但是,如果您现在为该变量创建一个对象以指向:
myList = new LinkedList();
然后,该变量将不再是空指针,它现在将是对恰好为空的 A 的引用(因为您尚未向其中添加任何项目)。List<String>
所以现在你可以调用一些方法,比如 and,而不用得到一个 .myList.size()
myList.isEmpty()
NullPointerException
评论
List<Integer>[]
<List<Integer>>
List<List<Integer>> foo = Stream.generate(ArrayList::new)
null
new
null
list.isEmpty()
null