【Java】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的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值