为什么在java中引入了这个循环?它是一个java创建吗?它的目的是什么(提高内存/ CPU利用率)?
答案 0 :(得分:10)
它掩盖了迭代器的使用,这些迭代器使用起来很重且很笨拙。有很多很多实例,你只想迭代一个集合而不用处理它的索引。 java foreach结构使这成为可能。
答案 1 :(得分:10)
为什么在java中引入了这个循环?
这只是为了简化对泛型集合和数组的循环。而不是
for (int i = 0; i < strings.length; i++) {
String string = strings[i];
// ...
}
你可以做到
for (String string : strings) {
// ...
}
使代码更易读,更易于维护。
是创建java吗?
不,它早在Java之前就存在于其他语言中。 Java实施起来相对较晚。
它的目的是什么?
见第一个答案。
要了解详情,请查看Sun guide on the subject。
更新:这并不意味着它会使其他类型的循环变得多余。如果你想为其他目的维护循环计数器而不是通过索引获取项目,那么使用索引的for循环仍然很有用。如果你想在循环中删除或更改集合本身的元素,那么使用迭代器的for循环仍然很有用。
答案 2 :(得分:3)
请参阅Foreach:
对于每个(或foreach)是一台计算机 遍历项目的语言习语 一个集合。通常使用Foreach 代替声明标准。 与其他for循环结构不同, 但是,foreach循环1通常 没有明确的反击:他们 基本上说“做到这一切 在这个集合“,而不是”做这个x 时代“。这避免了潜力 逐个错误并生成代码 更容易阅读。在面向对象中 语言和迭代器,即使 隐含的,经常被用作手段 遍历。
几种语言,包括Python, 只有一个foreach循环,需要 明确计算实现 行为的“标准”。
特别是关于Java的部分:
在JDK 5.0中引入了foreach-construct。官方消息来源使用了几个名称。它被称为“增强的循环”,“For-Each循环”和“foreach声明”。
答案 3 :(得分:2)
这实际上只是Java模仿的功能结构已经存在了很长时间,it's called map。实现它的原因是,通常会创建一个循环,只需对容器的每个元素执行一个操作,而不考虑它的索引。 Java的for(element : container) { doSomethingWith(element); }
语法只是一种比其他方法更简洁的方法,它可以用索引进行for循环
for(int i=0; i<container.size(); ++i) { doSomethingWith(container.at(i)); }
更长并创建一个不必要的索引变量,或者使用迭代器
进行循环Iterator it = container.iterator();
while(it.hasNext()) { doSomethingWith(it.next()); }
也更长。这个循环基本上是for( : ) {}
循环被编译为的,尽管可能存在一些细微的差别(我实际上没有看到字节码)。
答案 4 :(得分:0)
很明显是“句法糖”
不要认为有任何提高效率。
Java社区希望语言有点现代化,与C#和Ruby竞争..