有些Java書籍在介紹Java中的傳參時都說,不論是基本類型還是對象類型,都是傳值。這種說法不能算錯,但往往讓很多初學Java的人感到很困惑。因為這裡所說的傳值與c++中簡單變量的傳值已經不是同一個概念。
對於Java傳參,我覺得更准確一點的描述是,不論參數是什麼類型,傳遞的都是參數的副本。
值得注意的是,如果一個類是final類型,那麼這個類的實例(即對象)是不可變的。當嘗試通過該對象的引用對對象重新賦值時,Java會生成一個新的對象並將該引用指向新的對象。因此之前的對象並沒有發生任何改變。
因此當參數是引用類型時,如果該類型是final的,此時的傳參看起來會和基本類型的傳值差不多(不會改變原有對象的值)。但是實質上傳遞的還是引用的副本。
final類型的類包括: