这是我的 Java 代码:
List<Object> objects = new ArrayList();
// Assign values to objects
...
for (int i = 0; i < objects.size(); i++) {
Object object = objects.get(i);
...
}
我有两个问题:
objects.size()
是在循环之前只计算一次,还是每次循环都计算一次?- 如果每次循环都计算
objects.size()
,如果没有多线程保护,其他线程同时更改它,代码可能会崩溃。
我说的对吗?
最佳答案
答案:
objects.size()
在每个循环中被调用(是否被计算取决于 ArrayList 的实现,你不应该关心它关于)- 是的,另一个线程可能会更改列表,这会影响您的循环
真实答案:
您不必关心,以下是您不必关心的方式:
- 使用 CopyOnWriteArrayList ,这是线程安全的。如果您使用迭代器对其进行迭代(正如 foreach 语法在内部使用的那样),您将迭代列表就像迭代开始时一样
- 使用
foreach
语法,这意味着您不必使用索引等 - 它已为您完成:
for (Object object : objects) {
// do something with each object
}
关于java - Java中 "for"语句每次循环都计算循环条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426693/