在JAVA中關於String類例項化時記憶體的問題
阿新 • • 發佈:2018-12-31
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類的物件 否則將造成大量的空間被浪費