这段Java代码正确吗?

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

你认为呢?


3
“for循环”只是“while循环”的一种语法简写,我不明白为什么要争论这个问题... - Roger Rowland
3
while也是一个循环! - adarshr
只是测试一下,但似乎正确。 - xlecoustillier
7
最简单和最好的方法应该是读作 for(String item : collectionOfStrings),对吗? - Tim Büthe
3
for循环示例有一个优点:它使创建的变量作用域较小。在while循环示例中,iter变量可以在循环外部访问。 - Tim Büthe
显示剩余6条评论
5个回答

11

两段代码都没有错误,从预期的结果来看。但是第二段代码虽然等效,但会污染局部变量,因为iter在循环结束后仍然被定义。


5
第二个选项很好。
第一个选项略微更好。它限制了循环变量的作用域。
但是自Java 1.5以来,foreach循环有时比这两种方法更优雅。
for ( String item : collectionOfStrings ) {
   ...
}

5

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


2

实际上这两者是相同的。for只是while的变体,或者说while只是for的变体,不管你喜欢怎么说。你可以使用 for

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

像这样

init
while(cond){
....
incr
}

1
你的同事是正确的。第一段代码,使用 for 循环,应该可以正常运行。
实际上,while 也是一个循环,所以你和他的代码都包含一个循环和迭代器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接