这个Java代码是否正确?

Ton*_*one 4 java iterator loops

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

for (Iterator<String> iter = collectionOfStrings.iterator(); iter.hasNext();) {
   String item = iter.next();
   ...
}
Run Code Online (Sandbox Code Playgroud)

我认为这段代码错了,因为循环重复.使用Iterator或使用For循环,但不需要同时使用它们.

我会重写代码如下:

Iterator<String> iter = collectionOfStrings.iterator();
while (iter.hasNext()) {
   String item = iter.next();
   ...
}
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Jav*_*ier 11

这两种代码都没有"错误",因为两者都做了预期的事情.第二个代码虽然等效,但会污染局部变量,因为iter在循环结束后仍然会定义.


rbe*_*ger 5

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


And*_*mas 5

第二个是好的.

第一个稍好一些.它限制了循环变量的范围.

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

for ( String item : collectionOfStrings ) {
   ...
}
Run Code Online (Sandbox Code Playgroud)