黑马程序员技术交流社区
标题:
为什么foreach能循环
[打印本页]
作者:
郑志强
时间:
2013-3-13 10:30
标题:
为什么foreach能循环
本帖最后由 郑志强 于 2013-3-14 18:42 编辑
内它并没有循环条件啊?为什么?那什么时候用它,能用于什么类
作者:
李易烜
时间:
2013-3-13 10:54
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
foreach的语句格式:
for(元素类型t 元素变量x : 遍历对象obj){
引用了x的java语句;
}
foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很 好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的 时候了。foreach一般结合泛型使用.
作者:
wanggang
时间:
2013-3-13 10:55
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach的语句格式:for(元素类型t 元素变量x : 遍历对象obj){ 引用了x的java语句;} 例如:for(int x : arry) {System.out.println(x);} 这是在依次打印出数组arry里的元素的值,就跟 for(int x=0;x<arry.length;x++) {System.out.println(arry[x]);} 是一样的效果
作者:
曾玉锋
时间:
2013-3-13 12:41
本帖最后由 曾玉锋 于 2013-3-13 12:44 编辑
1.首先强调掉的是foreach只能对实现了IEnumerator接口或者间接实现IEnumerator接口的类型进行遍历。
2.foreach遍历集合的过程:
下面是IEnumerator接口,
public interface IEnumerator
{
object Current
{
get;
}
bool MoveNext();
void Reset();
}
foreach遍历集合的过程如下:
1.将集合或者数组的数据copy一份到内存,并且获得一个IEnumerator对象,获得当前在新的集合或者新数组中的第一个对象赋值给Current,
大家可以看到Current属性是只读的,所以只能读不能修改,况且也不是对原集合或数组中操作。
2.通过调用IEnumerator对象的MoveNext()方法判断是否还有对象可读,且顺序向下依次读取,所以是没法倒着读,也不能用下标去改变读取的顺序。
作者:
郑志强
时间:
2013-3-14 18:41
谢谢3楼 很详细
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2