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

OPK*_*OPK 3 java final

如果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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 13

final指的是无法改变参考,例如你不能说name = new StringBuilder().它并没有使引用的对象不变.

不变性是一个阶级的财产.可变类型的对象总是可变的.


Sot*_*lis 5

您必须开始区分变量,值(参考值和原始值)以及对象和基元.

变量是值的容器.该值可以是参考值(对象)或原始值.

final一旦使用其原始值初始化变量,就不能使用赋值运算符为变量赋值.