Java基础之增强型for循环
目录
增强型for循环语法:for(ElementType element:arrayName){};
增强型for循环删除的问题
增强型for循环语法:for(ElementType element:arrayName){};
举个例子:(1)
int[] numArray = { 1, 2, 3, 4, 5, 6 };
for (int i : numArray) {
System.out.print(i);
}
//结果会是123456
测试方法
public static void testFor() {int [] array = {1,2,3};for(int i : array){System.out.println(i);}List list = new ArrayList();list.add(1);list.add(2);list.add(3);for(Object obj : list){System.out.println(obj);}Map map = new HashMap<>();map.put("1", "1");map.put("2", "2");map.put("3", "3");for (Map.Entry stringStringEntry : map.entrySet()) {System.out.println(stringStringEntry.getKey() + stringStringEntry.getValue());}}
使用idea查询编译后的class文件

编译后的文件信息为
public static void testFor() {int[] array = new int[]{1, 2, 3};int[] arr$ = array;int len$ = array.length;for(int i$ = 0; i$ < len$; ++i$) {int i = arr$[i$];System.out.println(i);}List list = new ArrayList();list.add(1);list.add(2);list.add(3);Iterator i$ = list.iterator();while(i$.hasNext()) {Object obj = i$.next();System.out.println(obj);}Map map = new HashMap();map.put("1", "1");map.put("2", "2");map.put("3", "3");Iterator i$ = map.entrySet().iterator();while(i$.hasNext()) {Entry stringStringEntry = (Entry)i$.next();System.out.println((String)stringStringEntry.getKey() + (String)stringStringEntry.getValue());}}
我们发现增强for循环遍历数组时使用的普通for循环,而遍历集合时使用的Iterator迭代器
增强型for循环删除的问题
测试Java代码
public static void testFor() {List list = new ArrayList();list.add(1);list.add(2);list.add(3);Iterator i$ = list.iterator();while(i$.hasNext()) {Object obj = i$.next();System.out.println(obj);list.remove(obj);}}
执行后
Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)at java.util.ArrayList$Itr.next(ArrayList.java:831)at com.test.controller.TestMain.testFor(TestMain.java:108)at com.test.controller.TestMain.main(TestMain.java:23)
解释说明:
迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。
相关源码:
java.util.ArrayList#fastRemove
java.util.ArrayList.Itr#remove
增强型for循环注意事项
- 在使用增强型for循环不支持遍历时删除元素
- 使用增强型for循环时,对遍历的集合需要做null判断,不然可能引发空指针异常。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!


