1. 程式人生 > >String作為形參傳遞改變內容和在方法中改變內容

String作為形參傳遞改變內容和在方法中改變內容

對於String的不可變性 有兩種情況

第一種:

       如圖 當String作為形參傳遞到方法裡的時候,實際上傳遞的是str引用的拷貝,改變的是str引用的拷貝,而後方法結束,形參str被銷燬, 原str的引用保持不變,還是指向還是指向原方法區的""123456"  這個方法輸出的是123456

第二種:

對於Java初學者, 對於String是不可變物件總是存有疑惑。看下面程式碼:

列印結果為:

s = ABCabc s = 123456

       首先建立一個String物件s,然後讓s的值為“ABCabc”, 然後又讓s的值為“123456”。 從列印結果可以看出,s的值確實改變了。那麼怎麼還說String物件是不可變的呢? 其實這裡存在一個誤區: s只是一個String物件的引用,並不是物件本身。物件在記憶體中是一塊記憶體區,成員變數越多,這塊記憶體區佔的空間越大。引用只是一個4位元組的資料,裡面存放了它所指向的物件的地址,通過這個地址可以訪問物件。也就是說,s只是一個引用,它指向了一個具體的物件,當s=“123456”; 這句程式碼執行過之後,又建立了一個新的物件“123456”, 而引用s重新指向了這個心的物件,原來的物件“ABCabc”還在記憶體中存在,並沒有改變。記憶體結構如下圖所示: