1. 程式人生 > >JAVA面試題02-String和StringBuffer的區別

JAVA面試題02-String和StringBuffer的區別

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;
    }