假设循环中存在以下情况:
LinkedList<String> myList = someMethodReturnsList();
int start = 0, end = 0;
while (end < myList.size() && someOtherCondition)
++end;
List<String> subList = myList.sublist(start, end);
... (do stuff and possibly alter list)
start = end;
我遇到的情况是仅有时,会调用 sublist
会抛出 IndexOutOfBoundsException
。鉴于我对 end < myList.size()
的第一次测试,这让我很困扰,所以我写了一些调试代码。我的调试代码告诉我介于 while
之间循环并调用sublist
,我的end
值最终为 34 而 myList.size()
返回 33。
这怎么可能?我的程序中没有其他线程可以在此列表上操作,那么我的循环检查是如何通过并递增 end
的?到 34?
编辑:这始终发生在我的代码执行中的特定点,因此这不是一个侥幸错误,但它不会发生在该函数的每个输入中,这使得这变得更加奇怪。
最佳答案
你所描述的情况是不可能的。
实际上,实现这种情况的唯一方法是您自己的调试:有一些 IDE 功能,例如代码元素检查,可以在应用程序在断点处暂停时执行部分代码。
您必须使用调试器工具更改 end
的值。
关于java - 列表大小具有意想不到的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35855615/