Java基础之增强型for循环

Java基础之增强型for循环目录增强型for循环语法:for(ElementTypeelement:arrayName){};增强for循环的原理增强型for循环注意事项增强型for循环语法:for(ElementTypeelement:arrayName){};举个例子:(1)int[]numArray={1,2,3,4,5,6};for(inti:numArray…

大家好,又见面了,我是你们的朋友全栈君。

目录

增强型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文件

Java基础之增强型for循环

编译后的文件信息为

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基础之增强型for循环

java.util.ArrayList.Itr#remove

Java基础之增强型for循环

增强型for循环注意事项

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149848.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mycat oracle读写分离_mycat读写分离原理

    mycat oracle读写分离_mycat读写分离原理今天做不成的事,明天也不会做好。各位同学大家好,今天给大家分享一下用Mycat进行数据库的读写分离,本篇文章是基于上一篇的mysql主从复制。Linux上实现Mysql的主从复制(为Mycat读写分离作准备)在上一篇文章中,我们在两个服务器使用同版本的操作系统和mysql:服务器1:centos7.3,mysql5.6服务器2:centos7.3,m…

    2022年10月13日
    3
  • java实现定时器的四种方式_java定时器实现文字内容交换

    java实现定时器的四种方式_java定时器实现文字内容交换前言:Java定时器目前主要有3种实现方式:JDK组件,SpringTask,Quartz框架。1.JDK组件(1)java.util.TimerTaskMyTimerTask.java:publicclassMyTimerTaskextendsTimerTask{@Overridepublicvoidrun(){System.out.println(“MyTimerTask,…

    2026年1月14日
    4
  • 新出台的治理iMessage垃圾短信的规则

    新出台的治理iMessage垃圾短信的规则

    2022年1月21日
    65
  • 颜色校准调整伽马_色彩gamma什么意思

    颜色校准调整伽马_色彩gamma什么意思目录1、色彩矫正(CCM)2、伽马校正(Gamma)1、色彩矫正(CCM)色彩校正(ColorCorrection)是指用相同的方法改变图像中的所有像素的颜色值,以得到不同得显示效果。图像采集系统在获得数字图像时,由于一起或环境光照或人为因素的影响,采集的图像往往与原始图像有很大差别。颜色校正可以在一定程度上减少这种差别。利用RGB颜色模型可以方便地调整图像的RGB分量值,这对校正偏色很有用。色彩校正的基本原理如下:其中,Mij…

    2025年12月9日
    5
  • 占位图怎么写[通俗易懂]

    占位图怎么写[通俗易懂]想必大家对占位图都不会陌生吧,非常犀利的一个工具,当然也有非常多优秀的网站为我们提供这样的接口。唯一遗憾的是国内的站点非常少。当然不是说国外的不行,正好相反,国外的那些占位图非常人性化,非常方便,唯一

    2022年8月4日
    7
  • 手把手教你彻底卸载MySQL[通俗易懂]

    手把手教你彻底卸载MySQL[通俗易懂]一步一图片,手把手教你彻底卸载MySQL

    2022年9月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号