JAVA面試題02-String和StringBuffer的區別
阿新 • • 發佈:2019-02-03
1.String是final的,不能被繼承。
2.String是不可變的,對String的任何拼接,截斷操作並不會改變原有String物件,而是重新生成了一些String物件。因此程式碼中絕對不能在迴圈中使用字串拼接操作,這樣會導致記憶體中建立多個String物件。
public final class String
```
* Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* Because String objects are immutable they can be shared. For example:
* <blockquote ><pre>
* String str = "abc";
* </pre></blockquote><p>
* is equivalent to:
* <blockquote><pre>
* char data[] = {'a', 'b', 'c'};
* String str = new String(data);
* </pre></blockquote><p>
3.StringBuffer是可變的,可以動態拼接字串,適合頻繁的字串拼接操作。
4.StringBuffer是執行緒安全的。實現執行緒安全的方式就是簡單的加synchronized。因此對同一個StringBuffer物件的操作,都會阻塞在該物件上的其他操作。比如呼叫length方法一樣也會阻塞,因為synchronized 修飾例項方法,鎖住的是當前例項物件。
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}