歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java克隆中String的特殊性

之前仔細研究過java中克隆的相關知識,http://www.linuxidc.com/Linux/2011-10/44935.htm,但是還有一些考慮不全的地方。

String不是基本數據類型,但是在深復制的時候並沒有進行單獨的復制,也就是說違反了深復制,僅僅復制了引用,而String沒有實現cloneable接口,也就是說只能復制引用。

那麼在修改克隆之後的對象之後,會不會將原來的值也改變了?

答案肯定是不會改變,因為String是在內存中不可以被改變的對象,就比如說在for大量循環中不推薦使用+的方式來拼湊字符串一樣,每次使用+都會新分配一塊內存,不在原來上修改,原來的沒有指向它的引用,會被回收。所以克隆相當於1個String內存空間有兩個引用,當修改其中的一個值的時候,會新分配一塊內存用來保存新的值,這個引用指向新的內存空間,原來的String因為還存在指向他的引用,所以不會被回收,這樣,雖然是復制的引用,但是修改值的時候,並沒有改變被復制對象的值。

所以在很多情況下,我們可以把String在clone的時候和基本類型做相同的處理,只是在equal時注意一些就行了。

Copyright © Linux教程網 All Rights Reserved