
上面必须修改为下面这样才是正确的,这是为什么呢? 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量?


上面必须修改为下面这样才是正确的,这是为什么呢? 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量?

在Java规范中提到
Any local variable, formal parameter, or exception parameter used but not declared in a lambda expression
must either be declared final or be effectively final (§4.12.4),
or a compile-time error occurs where the use is attempted.
大概意思是 Lambda 表达式中要用到的,但又未在 Lambda 表达式中声明的变量,必须声明为 final 或者是 effectively final,否则就会出现编译错误
简单说就是Lambda使用的局部变量,不希望是外部能修改,修改都是值的修改,这里的值是值传递,对于基本数据类型、包装类、String不可被修改内容,其他引用类型不能修改地址。