这个Java代码是否正确?

时间:2013-03-18 13:49:40

标签: java loops iterator

我和我的一位同事正在讨论(阅读论点!)。我认为这段代码非常错误,但他认为它没有任何问题:

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();
   ...
}

您怎么看?

5 个答案:

答案 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也是一个循环,所以你的代码和他的代码都包含一个循环和迭代器。