String:

給String賦值,會在常量池中查找是否有相同的字串常量,如果有則回傳堆疊中的參考,如果沒有則創建常量回傳參考.
new String()除了在堆疊和常量池中創建物件之外,同時會在堆中創建物件.

StringBuffer:
執行緒安全的String,jdk1.0之后出現,初始容量為16個字符,原始碼如下

StringBuffer 不會像String一樣改變字串就會重新生成一個物件,而是以連接的方式直接拼接字串.
append(String str)為StringBuffer提供的執行緒安全的字串追加方法,由原始碼可知追加通過synchronized實作執行緒安全,關于如何實作執行緒安全的底層原理,會在之后的juc專欄中詳細剖析.
setChat(int index,char ch) 可以做字符替換操作,同樣執行緒安全.
當然,synchronized實作執行緒安全的同時大大降低了字串操作的效率.
StringBuilder:

非執行緒安全的的字串物件,同樣提供append()方法的各種操作多載,拼接替換洗掉某個字符的操作,在沒有執行緒安全問題的前提下,此種操作效率最高.
總結:
1.String創建字串效率較低,適合少量字串操作的場景
2.StringBuffer使用synchronized關鍵字保證操作安全性,但同時損失了性能,適合安全性較高的場景使用.
3.StringBuilder執行緒不安全,操作高效,適合安全性要求較低但又需要很高的操作效率的場景使用.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237591.html
標籤:其他
