String每次修改都會新建一個新的對象,再改變對象引用指向新的string對象,而且不會被Java垃圾回收機制回收
如下圖,當爲空的str獲得"ab"值後,id改變了,19=>26
修改前,
修改後
StringBuilder與StringBuffer則不一樣,改變再多次也不會產生新對象。
另一方面,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字
總的來說:
速度 StringBuilder>StringBuffer>String
String每次修改都會新建一個新的對象,StringBuffer和StringBuffer不會
StringBuffer是一個線程安全的可變字符序列
StringBuilder是一個線程不安全的可變字符串
StringBuilder用作 StringBuffer 的一個簡易替換
String能夠初始化爲空,StringBuffer和StringBuffer會報錯
StringBuffer 與 StringBuffer 的換行
StringBuffer、StringBuilder使用append鏈接兩段字符,用System.getProperty(“line.separator”)代替\n換行,因爲除windows外其他操作系統不一定兼容\n的,所以用上述方式換行.如下圖代碼及輸出結果