有一半的人不知道 for 与 foreach 的区别

点击“终码一生”,关注,置顶公众号 每日技术干货,第一时间送达&#x…

点击“终码一生”,关注,置顶公众号

每日技术干货,第一时间送达!

之前有一个同事突然我问了我一个问题,说在foreach当中能不能删除list里面的元素,我当时大概说了一下是否能删除,以及原因;接下来我们来探讨一下是否能够如此;

(1)遍历元素

首先,我们一一段代码为例:

遍历后结果如下:

结果毫无疑问。

我们再来看看编译后的源码(idea自带,在target包里打开你的类源码文件即可):

可见,遍历数组使用的是原始for循环,集合的话使用的是Iterator迭代器。

(2)删除元素

哦的k!接下来我们来删除元素:

使用for循环:

结果:

显然成功!

使用foreach:

结果:

显然木有成功!

原因:

迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。

如果想要删除元素的话需要使用迭代器内部的remove方法:

结果:

(3)修改元素

使用原始for:

结果:

哦的k!可以修改元素;

使用foreach:

结果:

看到咯,不行的哦。

辣么,修改元素不行,修改元素的属性可不可以呢?让我们来看下吧。

(4)foreach修改元素属性

(for就不测试了)

创建一个学生类:

哦的k,接下来测试代码:

结果:

484很神奇!修改不了对象,却可以修改对象的属性。

  • for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。

  • foreach不可以删除/修改集合元素,而for可以

  • foreach和for都可以修改元素里面的属性

所以相比较下来for循环更为灵活。

PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/4031.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部