Java中for与foreach的区别是什么
导读:本文共3141字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: (1)遍历元素首先,我们一一段代码为例:String[]array={"1","2","3"};for(Stringi:array){System.out.println(i);}ArrayList<String>list=newArrayList<>();list.... ...
目录
(为您整理了一些要点),点击可以直达。首先,我们一一段代码为例:
遍历后结果如下:
1
2
3
111
222
333
结果毫无疑问。
我们再来看看编译后的源码(idea自带,在target包里打开你的类源码文件即可):
可见,遍历数组使用的是原始for循环,集合的话使用的是Iterator迭代器。
哦的k!接下来我们来删除元素:
使用for循环:
结果:
11:11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
11:11:52.539 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
显然成功!
使用foreach:
结果:
11:50:48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.xiaolinge.com.hello.HelloWord.main(HelloWord.java:30)
显然木有成功!
原因:
迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。
如果想要删除元素的话需要使用迭代器内部的remove方法:
结果:
12:06:14.042 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:06:14.046 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
使用原始for:
结果:
12:12:56.910 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:12:56.915 [main] INFO com.xiaolinge.com.hello.HelloWord - [444, 444, 444]
哦的k!可以修改元素;
使用foreach:
结果:
12:34:47.207 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:34:47.211 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
看到咯,不行的哦。
辣么,修改元素不行,修改元素的属性可不可以呢?让我们来看下吧。
(for就不测试了)
创建一个学生类:
哦的k,接下来测试代码:
结果:
huge
xiaoyao
jingtian
jingtian
484很神奇!修改不了对象,却可以修改对象的属性。
Java中for与foreach的区别是什么的详细内容,希望对您有所帮助,信息来源于网络。