Avatar ·

Java中for-each循环实际上是如何工作的?带示例的详细解释

大家好!我最近开始学习Java,遇到了for-each循环。看起来一切都清楚:for (int x : numbers) { ... } —— 只是遍历数组或集合的元素。但当我深入挖掘时,出现了很多问题。 例如,我写了这样的代码:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

for (String s : list) {
    if (s.equals("B")) {
        list.remove(s); // ConcurrentModificationException!
    }
}


然后我得到了ConcurrentModificationException。为什么?在普通的for (int i = 0; i < list.size(); i++)中不会发生这种情况。

另一个例子——我尝试通过for-each修改数组元素:

int[] arr = {1, 2, 3};
for (int x : arr) {
    x = x * 2; // 不起作用!数组没有改变
}


为什么x不引用数组元素?而且“底层”到底发生了什么?for-each能处理任何数据类型吗?编译器如何...