如果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().它并没有使引用的对象不变.
不变性是一个阶级的财产.可变类型的对象总是可变的.
您必须开始区分变量,值(参考值和原始值)以及对象和基元.
变量是值的容器.该值可以是参考值(对象)或原始值.
final一旦使用其原始值初始化变量,就不能使用赋值运算符为变量赋值.