需要澄清最终的StringBuffer对象

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)

输出:

你好,欢迎

Psh*_*emo 9

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)