我和我的一位同事正在讨论(阅读论点!)。我认为这段代码非常错误,但他认为它没有任何问题:
for (Iterator<String> iter = collectionOfStrings.iterator(); iter.hasNext();) {
String item = iter.next();
...
}
我认为此代码错误,因为存在重复的循环。要么使用Iterator,要么使用For循环,但不需要同时使用它们。
我会按如下方式重新编写代码:
Iterator<String> iter = collectionOfStrings.iterator();
while (iter.hasNext()) {
String item = iter.next();
...
}
您怎么看?
答案 0 :(得分:11)
这两个代码都没有“错误”,因为两者都做了预期的事情。第二个代码虽然等效,但会污染局部变量,因为iter
在循环结束后仍然定义。
答案 1 :(得分:5)
您的两个示例在语法上都是正确的。将声明置于for循环中的一个优点是变量在代码块结束后释放,而迭代器在while循环结束后仍然存在
答案 2 :(得分:5)
第二个是好的。
第一个稍好一些。它限制了循环变量的范围。
但是从Java 1.5开始,foreach循环有时候比任何一个都更优雅:
for ( String item : collectionOfStrings ) {
...
}
答案 3 :(得分:2)
实际上它是一样的。因为只是while的变化,或者while只是for的变体,但是你想要它。你可以写一个for
for (init;cond;incr){
...
}
像这样
init
while(cond){
....
incr
}
答案 4 :(得分:1)
你的同事是对的。带有for
循环的第一个代码应该运行得很好。
实际上,while
也是一个循环,所以你的代码和他的代码都包含一个循环和迭代器。