文章目录
- 前言
- 一、for循环
- 二、foreach循环
- 总结
前言
for循环和foreach的区别
以下仅是我为了记忆梳理的过程,有任何错误感谢各位指出!
一、for循环
for循环是基于下标来定位循环的,也就是说for循环适用于带有下标的操作(例如数组),同时for循环可以进行集合的增删,但for循环在进行完增删操作后,由于是基于下标来定位循环的,就会导致都不到的问题,由于集合长度已发生变化会抛出IndexOutOfBoundsExcecption(下标越界异常)异常
二、foreach循环
foreach循环也称增强for循环,jdk1.5以后才有的,从名称我们就可以看到他是对for循环的一种增强,它是基于指针直接移动的,不能进行增删操作
我们上代码试试看如果foreach进行增删操作会怎么样!
package top.dyt.corejava.day02;
import java.util.ArrayList;
import java.util.List;
public class ForeachTest {
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
for (Object l :
list) {
if (l.equals(3)) {
list.remove(l);
}
}
}
}
--------------------------------------------------
Exception in thread "main" java.util.ConcurrentModificationException
//会抛出并发修改异常
我们会发现在用foreach进行删除操作时会报ConcurrentModificationException(并发修改异常)
foreach循环可以迭代数组和所有实现了Iterable的对象
这句话怎么理解呢?我们都知道List集合的父接口是Collection接口,但其实还有一个更大的接口也就是Collection接口的父接口Iterable,下面是Collection的源码部分,很明显它继承了Iterable,而Iterable官方给解释翻译过来是实现此接口允许对象成为增强 for 语句(有时称为“for-each 循环”语句)的目标,也就是说只要你实现了Iterable接口那么你就一定可以用foreach迭代,当然foreach也可以迭代数组。
总结
- for循环是基于下标来定位的循环,可以进行集合的增删操作,多用于数组的遍历
- foreach是基于指针直接移动的,适用于没有下标的集合进行迭代,不能进行增删操作
- foreach可以迭代数组和所有实现了Iterable的对象