使用final關鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容仍是能夠改變的。例如,對於以下語句:web
Final StringBuffer a=new StringBuffer("Hello");app
上面的這條語句在堆中建立了一個StringBuffer類型的"Hello"對象,並建立了一個變量a指向堆中該對象的首地址。
若是再執行以下語句將報告編譯期錯誤:spa
a=new StringBuffer("immutable");
可是,執行以下語句則能夠經過編譯:orm
a.append(" world!");對象
因爲上面這條代碼,只是修改了對象中的內容,而並無修改變量的引用,即變量的引用仍是堆中的那個地址,只是那個地址中的內容發生了改變罷了。it
有人在定義方法的參數時,可能想採用以下形式來阻止方法內部修改傳進來的參數對象:即在參數類型前面添加final修飾編譯
public void method(final StringBuffer param){table
// param.append("a");import
}變量
實際上,這是辦不到的,在該方法內部仍然能夠增長以下代碼來修改參數對象的內容:
param.append("a");