String是在java編程中用的最多的數據類型,因此也有很多與其他數據類型不同的性質。
創建字符串可以用的命令有:
String str="abc";//創建str字符串,內容為abc。
String str=new String("abc");//創建str字符串,內容為abc。
雖然兩種方法都可以創建,但是卻有很大的不同。
分析一下這兩句命令:
String str="abc";
這句程序的內存分配情況為:
首先在棧內存中為str開辟空間,然后在堆內存中開辟匿名字符串abc的空間,再由str指向abc的空間。這種方法很簡單,也很方便,而且在堆內存中也只開辟了一塊內容為abc的空間,沒有多余的空間。
如果寫語句:String str1="abc";創建一個str1字符串,內容同樣為abc,那么內存空間的開辟和指向情況為:
可以看到str和str1指向同一塊堆內存,這是為什么呢?因為String用的最多,很特殊,因為對于String來講使用直接賦值的方式會在字符串池中保存內容。如果之后在聲明字符串的時候發現內容一樣,則不會重新開辟空間,而是從內存池中取出數據繼續使用。
String str=new String("abc");
這句程序的內存分配情況為:
這句程序會在堆內存中開辟一塊內容為abc的匿名空間,然后再new一塊空間,賦值abc,并有str指向這里,這時候匿名空間由于沒有棧指向成為垃圾,然后被回收。
可以發現,程序開辟了兩個空間,與前一個相比慢多了。所以在開發中絕對不能使用關鍵字new實例化String類。而且,如果直接使用賦值的方式也可以減少堆內存的開銷。
posted on 2010-10-16 23:46
Mineralwasser 閱讀(2313)
評論(4) 編輯 收藏