使用final關鍵字修飾一個變數時,是引用不能變,還是引用的物件不能變?

瓜瓜東西發表於2014-03-31

物件可變,引用不可變


使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的物件中的內容還是可以改變的。例如,對於如下語句:

 final StringBuffera=new StringBuffer("immutable");
執行如下語句將報告編譯期錯誤:

a=new StringBuffer("");
但是,執行如下語句則可以通過編譯:

a.append(" broken!");

 

有人在定義方法的引數時,可能想採用如下形式來阻止方法內部修改傳進來的引數物件:

public void method(final  StringBuffer param){

}

實際上,這是辦不到的,在該方法內部仍然可以增加如下程式碼來修改引數物件:

        param.append("a");

相關文章