String類型變量

Java中的String類型確實是不允許改變其內容的,String類型的對象一旦建立,將在堆內存當中佔據一個固定的內存空間,String類型的對象無法改變。
但是你在運算的時候又發現,你定義的String類型的s變量又是可以進行連接的,如"abc"+"def"最終得到的s的值是"abcdef",這似乎看着String類型的對象又是可以改變的,這是自相矛盾嗎?
其實,String對象不允許改變內容是正確的,但是可以改變定義的String類型的變量指向,你定義的String s其實是一個指向String對象的指針,如果不存在對象就爲null。
如果你定義了:
String s="abc";
那麼將創建一個內容爲"abc"的String對象,並且s指向這個對象。
一旦s=s+123+new Date()這樣的操作,那麼將創建一個新的String對象來存放新的內容,原先的對象依舊在內存中,但是s不在指向它,那麼這個對象就會成爲垃圾內存,在某一個特定的時刻有Java虛擬機回收。
如果希望存放的String可以調整大小,而不是創建新的內存來存放新的對象,可以使用StringBuffer這個類來存放。這個內存可以調整大小。而不會拋棄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章