增强的“for”循环和lambda表达式
- 论坛
- 增强的“for”循环和lambda表达式
8 浏览
增强的“for”循环和lambda表达式
据我理解,Lambda表达式捕获的是值,而不是变量。例如,以下代码会导致编译时错误:
for (int k = 0; k < 10; k++) { new Thread(() -> System.out.println(k)).start(); // 错误 - 无法捕获k // 在封闭作用域中定义的局部变量k必须是final或有效final }
然而,当我尝试使用增强的for循环
运行相同的逻辑时,一切都正常:
ListlistOfInt = new Arrays.asList(1, 2, 3); for (Integer arg : listOfInt) { new Thread(() -> System.out.println(arg)).start(); // 可以捕获'arg' }
为什么增强的for循环
可以正常工作,而普通的常规for循环
不行,尽管增强的for循环
也会像普通循环一样在某个地方递增变量呢?