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

时间:2015-01-08 22:50:48

标签: 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);
    }

}

2 个答案:

答案 0 :(得分:12)

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

不变性是的属性。可变类型的对象总是可变的。

答案 1 :(得分:5)

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

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

一旦使用原始值初始化final变量,就不能使用赋值运算符为{{1}}变量赋值。