JPL 8:a 情况,effectively final 和 final 的区别

JPL 8:a situation,the difference between effectively final and final

有效最终代码

public void say() {

    String b = "222"; // effectively final b

    class A {

        public A(String c) {
            b = "123"; // error
        }

    }

    b = "123"; // success; if b is final, it is an error

}

有更详细的区别吗?

如果你的变量在声明后受到影响(例如,任何时候你写 "b = "123")那么它实际上不是最终的。

在内部 class 或嵌套 class(例如您的 class A)中,您只能从有效最终的外部范围(例如 b)引用变量。

相同的限制适用于派生自嵌套 classes 的构造,例如 lambda。

使用 "final" 关键字声明变量是一种确保变量有效的便捷方式。