String,StringBuffer,StringBuilder 三者之間的區別是什麼?
阿新 • • 發佈:2019-01-24
1.String 字串產量
2.StringBuffer 字串變數(執行緒安全)
3.StringBuilder 字串變數 (非執行緒安全)
1.String型別,是java內的物件,是不可改變的物件,當每次對String進行改變時,都需要生成一個新的String物件,然後將指標指向一個新的物件,如果在一個迴圈裡,不斷的改變一個物件,就要不斷的生成新的物件,如果物件多了,java的垃圾自動回收機制會開始工作了,所以效率很低,建議在不斷更改String物件的地方不要使用String型別。
2.StringBuffer是個可變的物件,就是每次操作都是對物件本身進行操作,而不用生成新的物件,這樣效率就會有很大的提高,在大部分情況下StringBuffer的效率要比String型別更高。
3.StringBuilder與StringBuffer一樣是個可變的字元序列,提供與StringBuffer相容的API,但是不能保證同步,
在用在字串緩衝區被當作執行緒的情況使用,在單機非多執行緒的情況下使用StringBuilder會有比較好的效率,因為StringBuilder沒有處理同步(Synchronized)問題。StringBuffer則會處理同步問題,StringBuild會在多執行緒下被操作,要改用Stringbuffer,讓物件自行管理同步問題。
總結:StringBuilder是執行緒不安全的,執行效率高,如果一個字串變數是在方法裡面定義,這種情況只可能有一個執行緒訪問他,不存在不安全的因素了,則用StringBuilder。
如果要在類裡面定義成員變數,並且這個類的例項物件會在多執行緒環境下使用那麼最好用StringBuffer