如果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);
}
}
答案 0 :(得分:12)
final
表示无法更改参考,例如你不能说name = new StringBuilder()
。 不使引用的对象不可变。
不变性是类的属性。可变类型的对象总是可变的。
答案 1 :(得分:5)
您必须开始区分变量,值(参考值和原始值)以及对象和基元。
变量是值的容器。该值可以是参考值(对象)或原始值。
一旦使用原始值初始化final
变量,就不能使用赋值运算符为{{1}}变量赋值。