1. StringJoiner:StringJoiner跟StringBuilder一樣,也可以看成是容器,創(chuàng)建后其中的內(nèi)容是可變的。
作用:提高字符串的操作效率,而且代碼簡潔
2. StringJoiner的構(gòu)造方法
public StringJoiner(間隔符號):創(chuàng)建一個StringJoiner的對象,指定拼接的間隔符號
public StringJoiner(間隔符號,開始符號,結(jié)束符號):創(chuàng)建一個StringJoiner對象,指定拼接的間隔符號,開始符號,結(jié)束符號
3. StringJoiner的成員方法
public StringJoiner add(添加的內(nèi)容):添加數(shù)據(jù),并返回對象本身
注意:add()方法只能添加字符串類型
public int length():返回長度(所有字符出現(xiàn)的個數(shù))
public String toString():返回一個字符串(該字符串就是拼接之后的結(jié)果)
4. (1):字符串儲存的內(nèi)存原理
· ·直接賦值會復(fù)用字符串常量池中的
· ·new出來的不會復(fù)用,會開辟一個新的空間
(2):字符串拼接原理
· ·如果拼接過程中沒有變量的參與,只有字符串的情況下,代碼會在編譯的時候直接生成拼接后的結(jié)果
例如:s = “a” + “b”
編譯后即為s = “ab”,然后再打印s
· ·如果拼接過程中有變量的參與
JDK8以前:系統(tǒng)會先創(chuàng)建一個StringBuilder對象,使用append方法將要拼接的對象添加到StringBuilder中,然后利用toString方法,將其轉(zhuǎn)換成String對象,這樣就會創(chuàng)建兩個新的對象
JDK8以后:系統(tǒng)會先預(yù)估拼接后的字符串有多長,然后再新建一個數(shù)組,將各個所需拼接的字符串放入其中,隨后完成拼接,這樣會新建一個字符串
· ·無論是JDK8以前還是以后,使用+進(jìn)行拼接,有變量參與的情況下,都會產(chǎn)生新的對象,會浪費空間和時間,所以在拼接字符串的時候最好不要使用+號直接進(jìn)行拼接,可以創(chuàng)建StringBuilder對象或者StringJoiner對象來拼接
5. StringBuilder提高效率的原理:
所有要拼接的內(nèi)容都是直接放到StringBuilder中,不會創(chuàng)建很多無用的空間,節(jié)約內(nèi)存
6. StringBuilder的原理
· ·默認(rèn)創(chuàng)建一個容量為16的字節(jié)數(shù)組
· ·添加的內(nèi)容小于16,直接存入字符對應(yīng)的ASCII碼值
· ·若一次存入的內(nèi)容超出16,就會擴(kuò)容,擴(kuò)容容量為老容量*2+2即34
· ·若一次存入的內(nèi)容超出34,則以實際長度為準(zhǔn)
長度是實際裝了的,容量是最大能裝多少