使用final關鍵字修飾一個變量時,是引用不能變,仍是引用的對象不能變?

   使用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");

相關文章
相關標籤/搜索