1.StringBuilder的原理
StringBuilder是用來幹什麼的?為什麼我們要學習StringBuilder?字串拼接明明String也可以實現
答:StringBuilder可以大幅提示字串拼接的效率,這就是我們學習它的理由
具體原因,我們在記憶體圖中進行講解 如圖
string拼接
主方法進棧,然後執行物件,字串常量池進行建立,
當碰到s2時,有“+”,系統就會自動生成StringBuilder,然後將字串進行拼接,接著再自動呼叫toString方法,將型別改為String,最後才把地址給s2.
s3也是如此,根據記憶體圖我們就會發現,如果使用字串進行拼接操作,每拼接一次,記憶體中就要產生2個物件(StringBuilder、ToString後),物件的建立和銷燬都需要時間,所以string拼接很浪費時間
完整流程:https://kdocs.cn/l/cnfY68qsWVNS?linkname=150995474
stringBuilder拼接
stringBuilder的記憶體空間是由我們自己建立的,因此,每次的執行,系統都不會自動建立,而是呼叫我們自行建立的緩衝區空間
所以,這就是為什麼stringBuilder在拼接方面的速度可以如此高效,在以後的拼接操作中,如果超過了5次的拼接,都建議使用StringBuilder來拼接
2.StringBuffer
StringBuilder與StringBuffer的使用一模一樣,所以我們現在完全可以使用StringBUffer方法,但是它們兩個之間也存在區別
1.StringBuilder是在JDK1.5開始才存在,StringBuffer則是在JDK1.0就存在
2.StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的,關於什麼是執行緒安全,我們暫不解釋,我們只需記住,執行緒安全對應的效率就低,執行緒不安全對應的效率也就高
可以想象成上廁所,有門和沒門,有門肯定就更安全,但是也阻礙了我們上廁所的時間。沒門我們直接就可以上廁所,但是肯定沒那麼安全