String類的存儲是通過final修飾的char[]數組來存放結果的。不可更改。所以每次當外部一個String類型的引用傳遞到方法內部時候,只是把外部String類型變量的引用傳遞給了方法參數變量。對的。外部String變量和方法參數變量都是實際char[]數組的引用而已。所以當我們在方法內部改變這個參數的引用時候,因為char[]數組不可改變,所以每次新建變量都是新建一個新的String實例。很顯然外部String類型變量沒有指向新的String實例。所以也就不會獲取到新的更改。
下面程序例子假定tString指向A內存空間,A內存空間存放了”hello”這個字符串,然后調用modst函數將tString引用賦值給了text引用,注意是引用。確實是傳址,我們知道String是不可變的,任何進行更改的操作都會產生新的String實例。所以在方法里面text指向了B空間,B空間存放了”sdf” 字符串,但是這個時候tString還是指向A空間,並沒有指向B空間。
兩次輸出結果都是