Java 使用调试器在列表上迭代的奇怪行为
在以下代码中:Java 使用调试器在列表上迭代的奇怪行为,java,debugging,intellij-idea,iterator,Java,Debugging,Intellij Idea,Iterator,在以下代码中: for (Iterator<MyClass> iterOuter = mList1.iterator(); iterOuter.hasNext();) { mClass1 = iterOuter.next(); for (Iterator<MyClass> iterInner = mList2.iterator(); iterInner.hasNext();) { mClass2 = iterInner.next();
for (Iterator<MyClass> iterOuter = mList1.iterator(); iterOuter.hasNext();) {
mClass1 = iterOuter.next();
for (Iterator<MyClass> iterInner = mList2.iterator(); iterInner.hasNext();) {
mClass2 = iterInner.next();
if (...) {
continue;
}
else if (...) {
//code 1
}
else if (...) {
continue;
}
else if (...) {
//code 2
}
}
}
for(迭代器iterOuter=mList1.Iterator();iterOuter.hasNext();){
mClass1=iterOuter.next();
for(迭代器iterInner=mList2.Iterator();iterInner.hasNext();){
mClass2=iterInner.next();
如果(…){
持续
}
否则如果(…){
//代码1
}
否则如果(…){
持续
}
否则如果(…){
//代码2
}
}
}
编辑:code 1&2
是数学计算,在任何时候都不会添加或删除迭代器
当我用调试器检查它时,我注意到在最后一次内部迭代之后,当我期望调试器跳转到内部for
行时,检查条件,然后实现它的循环结束,并跳回外部for
循环
相反,在内部for
检查之后(当不满足条件并且需要跳回外部时),调试器跳转到带有//code 2
的行,不在那里执行代码,然后跳回外部for
这里发生了什么事?这是调试器的问题还是java的问题?
if-else-if
结构与continue
等有关?@luigimendoza您在消费中的意思是什么?我使用mClass1
进行计算,但我不会向iterOuter
添加或删除元素<代码>代码1和代码2只是数学计算。这似乎很奇怪,但如果代码保持不变,就不会发生这种情况。您是否尝试过隔离问题并用其他方法重现它?你能在这里分享这段代码吗?@LuiggiMendoza这是一段孤立的代码这听起来像是Java 1.6调试器中的一个已知错误,带有增强的for循环。您是否碰巧在1.6虚拟机上运行此功能?见@JJF谢谢你的好意!我运行的是1.8,我怀疑这是调试器中的某种“glidtch”,而不是我所做的错误。