【发布时间】:2011-09-02 10:55:45
【问题描述】:
for 每个循环的通常形式是这样的:
for(Foo bar: bars){
bar.doThings();
}
但如果我想保留 bar 直到循环结束,我可以不使用 for each 循环:
Foo bar = null;
// - Syntax error on token "bar", Identifier expected after this token
for(bar: bars){
if(bar.condition())
break;
}
bar.doThings();
for循环出现上述语法错误。
这是为什么呢? 我对解决方法不感兴趣,只是好奇这个限制背后的考虑因素。
相比之下,用普通的for循环,变量可以在外面声明也可以不声明……
int i = 1;
for(;i<max;i++){
for(;;){
// Do things
}
}
【问题讨论】:
-
您实际上可以将此行加粗,使其更加突出。 “为什么会这样?我对解决方法不感兴趣,只是好奇这个限制背后的考虑因素。”有趣的问题顺便说一句 +1。
-
如果 bar 为空,您将在
bar.doThings()上获得 NPE。该构造对 java 没有任何添加,除了:它允许在不接触代码的情况下交换带有 Object[](或具体 [] impl)的集合。这是我最喜欢的部分。总有编辑为您编写迭代器循环(ala for( : ))