Lea*_*ner 4 java final stringbuffer
通常,如果一个变量被声明为final,我们就不能覆盖该变量的值,但是当我们使用字符串缓冲区时这并不好.有人能让我知道为什么吗?
以下代码有效!!!!!!
public static void main(String args[]) {
final StringBuffer a=new StringBuffer("Hello");
a.append("Welcome");
System.out.println(a);
}
Run Code Online (Sandbox Code Playgroud)
输出:
你好,欢迎
从Java语言规范(强调我的):
一旦分配了最终变量,它总是包含相同的值.如果最终变量包含对对象的引用,则可以通过对对象的操作来更改对象的状态,但该变量将始终引用同一对象.
因此可以操纵指向的对象状态 a
a.append("Welcome"); //is OK
Run Code Online (Sandbox Code Playgroud)
但只是无法重新分配a另一个对象
final StringBuffer a = new StringBuffer("Hello");
a = new StringBuffer("World"); //this wont compile
Run Code Online (Sandbox Code Playgroud)