我是靠谱客的博主 还单身水蜜桃,最近开发中收集的这篇文章主要介绍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<String, String> map = new HashMap<>();
	map.put("1", "1");
	map.put("2", "2");
	map.put("3", "3");
	for (Map.Entry<String, String> 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<String, String> map = new HashMap();
	map.put("1", "1");
	map.put("2", "2");
	map.put("3", "3");
	Iterator i$ = map.entrySet().iterator();

	while(i$.hasNext()) {
		Entry<String, String> 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);
	for(Object obj : list){
		System.out.println(obj);
		list.remove(obj);
	}

}

编译后的class文件信息

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.ConcurrentModificationException
	at 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循环注意事项

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

 

最后

以上就是还单身水蜜桃为你收集整理的Java基础之增强型for循环的全部内容,希望文章能够帮你解决Java基础之增强型for循环所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部