当前位置: 首页 > 知识库问答 >
问题:

为什么lambdas中使用的局部变量必须是final或实际上是final?[副本]

宋华美
2023-03-14

这个问题在这里已经有了答案:

>

  • 为什么匿名类只能访问最终变量?

    为什么对于实例变量[重复]忽略“Lambda表达式中使用的变量必须是final或实际上是final”警告

    Supplier<Integer> incrementer(int start) {
      return () -> start++;
    }
    
    1. “lambda在start方法参数被垃圾回收后才能运行”是什么意思?
    2. 为什么要复制?
  • 共有1个答案

    徐博雅
    2023-03-14

    >

  • 表示在调用supplier对象的get()方法之前,lambda代码(start++部分)不会执行,这发生在incrementer()方法调用方的某个位置,即在incrementer()方法返回后的一段时间。

    写这句话的人大错特错,因为参数在堆栈上,而不是堆上,所以它们不会被“垃圾回收”。鉴于这样一个巨大的错误,我建议你忽略这篇文章,因为作者不知道他在谈论什么。

    这已经包含在您提供的第一个链接的公认答案中。我建议你读一下。

  •  类似资料: