1. 程式人生 > >在JAVA中關於String類例項化時記憶體的問題

在JAVA中關於String類例項化時記憶體的問題

String類在JAVA開發中是必不可少的

但是  String物件在例項化時記憶體問題卻很嚴重

String類以下有兩種例項化方式

⑴用 new String ( )

如  String str = new String("Hello World!") 

系統會先為括號裡的“Hello World!”開闢出一個堆記憶體的空間    然後再開闢一個新空間(內容也是 "Hello World!" )給String物件的屬性

這樣  就開闢出了兩個空間  

一個棧記憶體地址只能匹配給一個堆記憶體  所以  String物件就只會後面開闢的空間而已

而之前開闢的那個存放“Hello World!”的空間就成了垃圾  白白浪費了記憶體空間

⑵用 “=”

String str = "Hello World!";

String str1 = "Hello World";

實際上 "Hello World!" 在堆記憶體中只有一個   str  和 str1 都是指向於存放 "Hello World!" 的空間

這樣就避免了浪費記憶體空間

另外:
例如:String str = "Hello";

    str = str + " World!";

這樣其實也很浪費空間  因為存放於棧記憶體中的字串的內容是不會改變的 

等於說這段程式碼只是再次開闢了一塊新的空間存放相加後的 “Hello World!”   只是str的指向變成了“Hello World!”

而之前 str 所指向的"Hello"  與 新開闢的“ World!” 的空間就白白浪費掉了

所以在迴圈中 儘量不要使用關於String類的物件   否則將造成大量的空間被浪費