4

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

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

你怎么看?

4

5 回答 5

11

两种代码都不是“错误的”,因为它们都按照预期进行。第二个代码虽然等效,但会污染局部变量,因为iter在循环结束后仍然定义。

于 2013-03-18T13:52:44.837 回答
5

您的两个示例在语法上都是正确的。将声明放在 for 循环中的一个优点是变量在代码块结束后被释放,而迭代器在 while 循环结束后仍然存在

于 2013-03-18T13:52:38.280 回答
5

第二个很好。

第一个稍微好一点。它限制了循环变量的范围。

但从 Java 1.5 开始,foreach 循环有时会比以下任何一个都更优雅:

for ( String item : collectionOfStrings ) {
   ...
}
于 2013-03-18T14:04:28.637 回答
2

其实是一样的。for 只是 while 的变体,或者 while 只是 for 的变体,但是你喜欢这样说。你可以写一个

for (init;cond;incr){
...
}

像这样

init
while(cond){
....
incr
}
于 2013-03-18T13:53:32.480 回答
1

你的同事是对的。第一个带有for循环的代码应该可以正常运行。

事实上,while也是一个循环,所以你的代码和他的代码都包含一个循环和迭代器。

于 2013-03-18T13:51:52.590 回答