Java开发之增强for循环要注意陷阱

增强for循环是Java中便捷的遍历数组和集合的语法,其内部基于迭代器实现。在遍历过程中尝试修改集合会导致ConcurrentModificationException异常。使用时需谨慎,不支持遍历修改,并且要防止空指针异常。了解这些陷阱有助于避免编程错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是增强for循环

增强for循环是一种简单模式的for循环,为了方便数组和集合的遍历而存在。

int[] arr = new int[]{1, 2, 3, 4, 5, 6};
        for (int a : arr) {
            System.out.println(a);
        }

        ArrayList<Integer> list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        for (int i : list) {
            System.out.println(i);
        }//加入Java开发交流君样:756584822一起吹水聊天

增强for循环的原理

对于集合的遍历,增强for循环其实内部是通过迭代器实现的,可以做一个简单的验证,我们知道在迭代器中,迭代的时候不允许修改,不然会抛出ConcurrentModificationException异常,那我们不妨在增强型for循环中也尝试去修改集合中的对象,看是否抛出同样的异常。

ArrayList<Integer> list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        for (int i : list) {
            if(i == 4)list.add(1024);
            System.out.println(i);
        }//加入Java开发交流君样:756584822一起吹水聊天

将上述集合for循环遍历中加入一行add对象的代码,运行确实会抛出异常。抛出的异常如下:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.next(ArrayList.java:831)
    at Test.main(Test.java:41)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
//加入Java开发交流君样:756584822一起吹水聊天

从上述异常的描述中可以看出,其中的确调用了Itr.next方法,所以内部是通过Iterator实现遍历的。

慎用增强型for循环之可能陷阱

  • 增强型for循环不支持遍历时修改
  • 使用增强型for循环时,对遍历的集合需要做null判断,不然可能引发空指针异常

image

最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:756584822

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值