String str =“dfgdth”;
无线循环str += str +new Random().next(888888)+Random().next(9999999)会出现堆溢出 +=改为=就不会,求告知为什么?
+= 是将随机获得的数字与str进行拼接,如果无限循环,str内的字符将无限增长(其实不止如此,每次+=原str将变成垃圾,内存消耗是很恐怖的,只不过GC会回收罢了,但str指向的内存GC不会回收),最终内存溢出。
= 是将随机获得的数字赋值给str,由于字符串的不可变性,原str将变成垃圾,Java垃圾回收器会在适当的时机将其从内存中清理掉,所以不会引起内存溢出。