【发布时间】:2019-10-16 08:57:01
【问题描述】:
我试图在迭代 ListIterator 时添加它,但在检查它是否工作时 hasNext() 总是返回 false。
正如javadoc 所说,ListIterator 是“一个列表迭代器,允许程序员在任一方向遍历列表,在迭代期间修改列表,并且获取迭代器在列表中的当前位置。”但是,当我尝试添加时,我既没有收到错误消息,也没有 ListIterator 获得新元素。
public void foo() {
List<String> bar = new ArrayList<String>();
bar.add("foobar");
ListIterator<String> quux = bar.listIterator();
while(quux.hasNext()) {
if(quux.next().equals("foobar")) {
quux.add("baz");
}
}
}
在这个函数结束时,我希望 ListIterator 包含新的字符串“baz”。但是,当我调用 hasNext() 方法时,它返回 false。程序甚至通过了 if 语句,结果表明 add-method 没有做它应该做的事情。
【问题讨论】:
-
我绝对喜欢那些不加解释就对 Q/A 投反对票的人。继续这样,这太有用了。
-
它不是“字符串比较”的重复。
-
@ArnaudDenoyelle 我同意你的观点,我收到了没有解释的反对票。
-
@LucienNestler 您不应将 String 与
==进行比较,而应将其与String.equals进行比较。在这个用例中,它可能会偶然工作(因为 vm 优化)但代码无效