String類型,相似於常量,對它對象的每個此操做至關於拋棄了原來的String對象,生成一個新的String對象,讓對象指向新String對象地址,例如: 程序員
String str1 = new String("abc");//新建一個str對象,好比爲其分配地址:12345,即str指向的地址是12345 app
String str2 = new String("def"); 性能
str1 = str1 + str2; 對象
解析:這裏其實又新建了一個String對象其值爲abcdef,那麼此時str指向的地址再也不是12345,而是其餘地址值,也就是說存儲有 「abc」的地址空間已經被捨棄,成爲廢棄的地址空間,縱然JAVA有完美的垃圾回收機制,程序員不用擔憂內存溢出,可是當有不少廢棄地址空間時,調用 GC來回收,仍然需耗費系統不少資源,從而減低系統性能。 內存
StringBuffer的情形: 資源
StringBuffer str1= new StringBuffer("abc");//假設此時地址認爲:12345 垃圾回收
String str2 = "def"; 程序
str1.append(str2);//此時str1指向的地址空間仍爲12345 字符
之因此會出現上面情形,是由StringBuffer的內部實現機制決定的,StringBuffer預先預留一部分地址空間以備擴充(通常是16個字符的預留空間),只有當須要的地址空間超過預留的地址空間時,纔會建立一個新對象,這點和String對象同樣的。 生成