文章目录

  • 前言
  • 一、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也可以迭代数组。

foreach和普通foreach java steam java for foreach区别_迭代


总结

  • for循环是基于下标来定位的循环,可以进行集合的增删操作,多用于数组的遍历
  • foreach是基于指针直接移动的,适用于没有下标的集合进行迭代,不能进行增删操作
  • foreach可以迭代数组和所有实现了Iterable的对象