For 循环在 Groovy 和 Java 中的工作方式不同
请看一下 groovy 中的以下代码片段:
def static void main(String... args) {
def arr = [1, 2, 3, 4, 5]
for (int f in arr) {
Thread.start { print f + ', '}
}
}
Out: 2, 3, 5, 5, 5,
我对这个输出感到惊讶。为什么“5”被打印了好几次?此外,在Java中运行等效代码看起来一切正常:
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5};
for (int f : arr) {
new Thread(() -> { System.out.print(f + ", "); }).start();
}
}
Out: 1, 5, 4, 3, 2,
谁能解释一下为什么会这样?看起来groovy的问题在闭包实现中。但是,这种行为非常奇怪。是某种错误,还是我只是没有意识到时髦是如何工作的?
谢谢!