String str =“dfgdth”;
無線循環str += str +new Random().next(888888)+Random().next(9999999)會出現堆溢出 +=改為=就不會,求告知為什麼?
+= 是將隨機獲得的數字與str進行拼接,如果無限循環,str內的字符將無限增長(其實不止如此,每次+=原str將變成垃圾,內存消耗是很恐怖的,只不過GC會回收罷了,但str指向的內存GC不會回收),最終內存溢出。
= 是將隨機獲得的數字賦值給str,由於字符串的不可變性,原str將變成垃圾,Java垃圾回收器會在適當的時機將其從內存中清理掉,所以不會引起內存溢出。