什么是增强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);
}

增强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);
}

将上述集合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)

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

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

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

最新文章

  1. Docker 1.12 集群
  2. 重新梳理HTML基础知识
  3. 【JVM】JVM之类加载器
  4. 词法分析 after Coding
  5. 黄聪:No &#39;Access-Control-Allow-Origin&#39; header is present on the requested resource解决办法
  6. win+Nginx+php+mysql 环境配置
  7. Js练习题之查找字符串中出现最多的字符和个数
  8. 机器学习相关&mdash;&mdash;协同过滤
  9. 【分享】SQL Server优化50法
  10. Linux 信号量同步编程
  11. cocos2dx-lua绑定自定义c++类(一)
  12. JVM内存最大能调多大分析
  13. 【Android进阶】Android面试题目整理与讲解(一)
  14. CCNA网络工程师学习进程(7)路由器的路由配置
  15. Angular2组件与指令的小实践
  16. CORS(跨站资源共享)介绍
  17. SVN中服务器地址变更
  18. SpringBoot应用的前台目录
  19. vue学习笔记4
  20. Java学习点滴——初识Java

热门文章

  1. Html学习_简易个人网页制作
  2. Siverlight网页应用程序中WCF通信注意事项
  3. hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法
  4. c语言的一些基础知识
  5. shell脚本中&gt;/dev/null的含义
  6. oracle学习之-----操作表中的数据
  7. php smarty section使用
  8. 服务器部署_nginx报错: [warn] conflicting server name &quot;www.test.com&quot; on 0.0.0.0:80, ignored
  9. Altium快捷键
  10. Android Service with Delphi 10 Seattle