溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

String、StringBuffer與StringBuilder之間有哪些區(qū)別

發(fā)布時(shí)間:2021-12-03 17:37:14 來(lái)源:億速云 閱讀:115 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹String、StringBuffer與StringBuilder之間有哪些區(qū)別,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

1.執(zhí)行速度:StringBuilder >  StringBuffer  >  String  
2.

String <(StringBuffer,StringBuilder)的原因
    String:是字符串常量
    StringBuffer:是字符串變量
    StringBuilder:是字符串變量
3.

StringBuilder:線程非安全的

StringBuffer:線程安全的

當(dāng)我們?cè)谧址彌_區(qū)被多個(gè)線程使用時(shí),JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當(dāng)然大多數(shù)情況下就是我們是在單線程下進(jìn)行的操作,所以大多數(shù)情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。



總結(jié):

1.如果要操作少量的數(shù)據(jù)用 String。

2.在單線程操作字符串緩沖區(qū)下,操作大量數(shù)據(jù)用 StringBuilder。

3.在多線程操作字符串緩沖區(qū)下操作大量數(shù)據(jù),需要保證線程安全的時(shí)候用 StringBuffer。

4.Java8中默認(rèn)已經(jīng)使用StringBuilder拼接字符串,所以以后使用+即可,而不需要使用StringBuilder類(lèi)了。

注意:
疑問(wèn)1.   
  1. String s = "abcd";

  2. s = s+1;

  3. System.out.print(s);

Sting不是字符串常量嗎,那這里為什么可以變動(dòng)?

解釋?zhuān)?p> 其實(shí)這是一種欺騙,JVM是這樣解析這段代碼的:首先創(chuàng)建對(duì)象s,賦予一個(gè)abcd,然后再創(chuàng)建一個(gè)新的對(duì)象s用來(lái)執(zhí)行第二行代碼,也就是說(shuō)我們之前對(duì)象s并沒(méi)有變化,所以我們說(shuō)String類(lèi)型是不可改變的對(duì)象了,由于這種機(jī)制,每當(dāng)用String操作字符串時(shí),實(shí)際上是在不斷的創(chuàng)建新的對(duì)象,而原來(lái)的對(duì)象就會(huì)變?yōu)槔唬牵没厥盏?,可想而知這樣執(zhí)行效率會(huì)有多低。

以上是“String、StringBuffer與StringBuilder之間有哪些區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI