java for循环的属性
考虑一个简单的java for循环:java for循环的属性,java,Java,考虑一个简单的java for循环: for (int x = 0; x < bigArray.size(); x++ ) { Someobject object = (Someobject) bigArray.get(x); process(object); } private void process(Someobject object) { Someobject newobject = moreProcessing(object); bigArr
for (int x = 0; x < bigArray.size(); x++ ) {
Someobject object = (Someobject) bigArray.get(x);
process(object);
}
private void process(Someobject object) {
Someobject newobject = moreProcessing(object);
bigArray.add(newobject);
}
for(int x=0;x
我的观察结果是,即使我在bigArray的末尾添加其他对象,并且bigArray不断变大,for循环仍将终止。这是因为JRE在for循环开始之前修复了测试条件的值(在本例中为x
List
的空bigArray
,循环将终止,因为它必须在循环内调用process
,以添加元素并增加size
,因此for循环中的条件变为true
,但size
是0
在那一点上。如果列表不为空,则
x
将始终与最新长度进行比较,即包括在过程中添加的对象
我假设bigArray
属于java.util.List
类型,在大多数情况下,测试条件将在每次迭代开始之前进行评估
什么类型的bigArray
?@Lewsterin:如果它是数组,就根本无法编译……这肯定不会以您给出的代码结束。请发布一个简短但完整的程序来演示这个问题,或者我很乐意发布一个简短但完整的程序来演示它不会失败(直到内存耗尽)。你错了。发布一些真实的代码来演示您的问题。当我尝试使用ArrayList重现此问题时,线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间,正如预期的那样。但是,我希望在问题中提到的情况下不会出现异常。