增强的“for”循环和lambda表达式

8 浏览
0 Comments

增强的“for”循环和lambda表达式

据我理解,Lambda表达式捕获的是值,而不是变量。例如,以下代码会导致编译时错误:

for (int k = 0; k < 10; k++) {
    new Thread(() -> System.out.println(k)).start();
    // 错误 - 无法捕获k
    // 在封闭作用域中定义的局部变量k必须是final或有效final
   }

然而,当我尝试使用增强的for循环运行相同的逻辑时,一切都正常:

List listOfInt = new Arrays.asList(1, 2, 3);
for (Integer arg : listOfInt) {
    new Thread(() -> System.out.println(arg)).start();
    // 可以捕获'arg'
 }

为什么增强的for循环可以正常工作,而普通的常规for循环不行,尽管增强的for循环也会像普通循环一样在某个地方递增变量呢?

0