String做爲形參傳遞和基本類型以及引用類型的不一樣

關於String類型做爲形參傳遞的問題,String類型做爲一個特殊的類型,有着其特殊性對象

首先,String類型是一個引用類型,可是其在內存中存儲倒是存儲在常量池中內存

普通的引用類型做爲形參傳遞時,咱們能夠看作該方法在內存中建立了一個參數的副本,方法中進行操做時,都是對其副本進行操做,例以下圖:數據類型

假設,原Student對象指向的是0x001這個地址,那麼副本也是指向0x001,下一步即是將副本中name和age的值進行改變,注意,改變的僅僅只是name和age的值,而副本此時仍是指向0x001這個地址,而整個方法調用的過程當中,惟一改變的就是建立的對象中的屬性;就是說,老六這我的,在22歲的時候,人家都是叫他二哥的,可是這我的仍是這我的。引用

可是,若是直接改變地址值,好比,在方法中從新new一個Student對象賦值;那麼s的指向就發生了改變,可是,注意,此時改變的只是副本中的取值。假設原Student對象指向0x001,則調用方法後,副本和實參同時指向0s001;而改變的是方法建立的副本,他的指向由0x001變爲了0x002,也就是說,原對象和副本指向不一樣了,那麼副本對其對象不管進行什麼操做,對原引用類型對象無任何影響,例以下圖:方法

下面咱們說說基本數據類型,基本類型在副本中操做時,直接進行賦值,並無地址的改變。等因而你的雙胞胎弟弟,他作什麼,跟你毛關係麼得。im

最後說下最特殊的String類型,每個String類型的對象都指向常量池中的一個地址,按道理,他的傳遞應當和引用類型的原則一致。數據

可是它有個特殊的特色在於,String類型的值改變,地址就會改變(內容相同,指向就相同,只要內容不一樣,指向就不一樣),如圖:img

因此說,雖然可能在形參中只是改變了String對象的值,可是其地址卻也是改變了,以下:new

就是說,副本中地址變了,跟原對象就沒了關係參數

相關文章
相關標籤/搜索