为什么我仍然可以更改这个最终变量?

Why can I still make changes to this final variable?

如果 name 被声明为 final,为什么我仍然可以调用 name.append 而输出是:shreya?我以为一旦赋值就不能更改最终变量?

public class Test1 {

    final static StringBuilder name = new StringBuilder("sh");
    public static void main(String[] args) {

        name.append("reya");
        System.out.println(name);
    }

}

final 表示不能更改引用,例如你不能说 name = new StringBuilder()。它不会使引用的对象不可变。

不变性是 class 的 属性。可变类型的对象始终是可变的。

您必须开始区分变量、值(引用值和原始值)以及对象和原始值。

变量是值的容器。该值是参考值(对于对象)或原始值。

您不能使用赋值运算符将新值赋给 final 变量,一旦它用其原始值初始化。