最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中String StringBuffer和StringBuilder的區(qū)別詳解

 更新時(shí)間:2022年01月24日 15:36:26   作者:sout("一個(gè)碼農(nóng)")  
大家好,本篇文章主要講的是java中String StringBuffer和StringBuilder的區(qū)別詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

從聲明定義上來(lái)談

只有String 可以 直接聲明創(chuàng)建

而 StringBuffer 與 StringBuilder 必須去new對(duì)象

這是因?yàn)橹挥蠸tring會(huì)在這種聲明方式下去字符串常量池創(chuàng)建,其他則沒(méi)有

 StringBuffer stf = new StringBuffer("abc");
 StringBuilder stb = new StringBuilder("abc");

StringBuffer 和 StringBuilder 都繼承自抽象類(lèi)AbstractStringBuilder

從結(jié)構(gòu)上來(lái)談

String一旦創(chuàng)建,就是固定不可變的 , 而StringBuffer與StringBuilder又被稱為長(zhǎng)度可變的字符串 , 那為什么 這兩個(gè)就長(zhǎng)度是可變的呢?

字符串的底層都是char[]數(shù)組,所以我們直接來(lái)看 jdk 源碼

String

StringBuffer

StringBuilder

可以發(fā)現(xiàn),只有string底層的char[] 數(shù)組是加了final關(guān)鍵字修飾的 , 這意味著它是一個(gè)常量,我們一旦在構(gòu)造方法中給定值之后,那么它就是不可變的了

但是StingBuffer和StringBuilder底層數(shù)組沒(méi)有加final修飾,這就意味著它是可修改的,例,如下

StringBuffer stf = new StringBuffer("abc");
StringBuffer s = stf.append(stf);

我們使用append()方法追加改變 stf 的值 ,然后使用一個(gè)新的引用去指向它,那么stf 和 s 指向的是同一個(gè)對(duì)象嗎? 

是的,因?yàn)槲覀儍H僅改變了它底層char[]數(shù)組的值 , 這里新的引用s指向的仍然是原來(lái)的對(duì)象

從線程安全來(lái)談

線程安全問(wèn)題一般存在于多線程的并發(fā)中(多個(gè)線程爭(zhēng)奪同一資源)

     String 是線程安全的 , 因?yàn)樗讓拥腸har[]數(shù)組是final的 , 它是不可被改變的,所以也就不存在線程安全問(wèn)題 ,但是因?yàn)椴豢勺?, 我們需要頻繁創(chuàng)建新的 , 這就導(dǎo)致它的性能不是很高,所以如果操作中要去頻繁修改字符串的值,我們一般使用另外兩種

     StringBuilder是線程不安全的 , 因?yàn)樗强勺兊? 線程之間都可以去任意修改它, 所以這之間難免會(huì)出現(xiàn)一些問(wèn)題 ,所以我們一般在單線程下需要頻繁修改字符串的值時(shí)用到它

     StringBuffer是線程安全的 , 雖然它也是可變的 , 但是用來(lái)操作它的每個(gè)方法里面都加了synchronized關(guān)鍵字(同步鎖), 也就是說(shuō) , 當(dāng)一個(gè)線程在對(duì)這個(gè)StringBuffer進(jìn)行操作時(shí),另外一個(gè)線程是沒(méi)有權(quán)利去操作的 , 直到上一個(gè)線程釋放鎖 ,它適用于多線程中

我們?cè)趯W(xué)習(xí)StringBuffer類(lèi)中的方法時(shí),需要特別注意這個(gè)方法 : substring()

這個(gè)方法的返回值類(lèi)型是String,并沒(méi)有改變?cè)瓉?lái)StringBuffer對(duì)象的值 ,例 :

    StringBuffer stf = new StringBuffer("abc");
    String substring = stf.substring(1);
    System.out.println(stf);
    System.out.println(substring);

輸出發(fā)現(xiàn) stf : "abc"   subString : "bc" ,此時(shí)并沒(méi)有去改變StringBuffer的值

總結(jié)

到此這篇關(guān)于java中String StringBuffer和StringBuilder的區(qū)別詳解的文章就介紹到這了,更多相關(guān)java String StringBuffer和StringBuilder內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC前端和后端數(shù)據(jù)交互總結(jié)

    SpringMVC前端和后端數(shù)據(jù)交互總結(jié)

    本篇文章主要介紹了SpringMVC前端和后端數(shù)據(jù)交互總結(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 分析ThreadLocal內(nèi)存泄漏問(wèn)題

    分析ThreadLocal內(nèi)存泄漏問(wèn)題

    ThreadLocal的作用是提供線程內(nèi)的局部變量,這種變量在線程生命周期內(nèi)起作用,減少同一個(gè)線程內(nèi)多個(gè)函數(shù)或者組件之間一些公共變量傳遞的復(fù)雜度,但是如果濫用ThreadLocal可能會(huì)導(dǎo)致內(nèi)存泄漏,所以本文將為大家分析ThreadLocal內(nèi)存泄漏問(wèn)題
    2023-07-07
  • Java設(shè)計(jì)模式之享元模式(Flyweight Pattern)詳解

    Java設(shè)計(jì)模式之享元模式(Flyweight Pattern)詳解

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在減少對(duì)象的數(shù)量,以節(jié)省內(nèi)存空間和提高性能,本文將詳細(xì)的給大家介紹一下Java享元模式,需要的朋友可以參考下
    2023-07-07
  • Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用

    Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用

    Java語(yǔ)言的數(shù)組是一個(gè)由固定長(zhǎng)度的特定類(lèi)型元素組成的集合,它們的數(shù)據(jù)類(lèi)型必須相同,聲明變量的時(shí)候,必須要指定參數(shù)類(lèi)型,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java for循環(huán)性能優(yōu)化實(shí)現(xiàn)解析

    Java for循環(huán)性能優(yōu)化實(shí)現(xiàn)解析

    這篇文章主要介紹了Java for循環(huán)性能優(yōu)化實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 23種設(shè)計(jì)模式(20)java中介者模式

    23種設(shè)計(jì)模式(20)java中介者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java中介者模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • QQ好友列表樹(shù)形列表java代碼實(shí)現(xiàn)代碼

    QQ好友列表樹(shù)形列表java代碼實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了QQ好友列表樹(shù)形列表簡(jiǎn)單實(shí)現(xiàn)方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • SpringBoot關(guān)于List集合的校驗(yàn)方式

    SpringBoot關(guān)于List集合的校驗(yàn)方式

    這篇文章主要介紹了SpringBoot關(guān)于List集合的校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java實(shí)現(xiàn)電影院訂票系統(tǒng)代碼

    Java實(shí)現(xiàn)電影院訂票系統(tǒng)代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)電影院訂票系統(tǒng)代碼,代碼實(shí)現(xiàn)了界面類(lèi)登錄注冊(cè)類(lèi),用戶類(lèi)等,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • java開(kāi)發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用

    java開(kāi)發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用

    這篇文章主要為大家介紹了java開(kāi)發(fā)ServiceLoader實(shí)現(xiàn)機(jī)制及SPI應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論

清苑县| 裕民县| 读书| 庆安县| 延长县| 天门市| 镇坪县| 正镶白旗| 玛曲县| 南部县| 加查县| 武功县| 师宗县| 唐海县| 新龙县| 光山县| 定结县| 洪洞县| 揭西县| 安吉县| 曲阜市| 靖江市| 江安县| 信宜市| 孟村| 邵东县| 改则县| 额济纳旗| 开平市| 酒泉市| 石台县| 吉安县| 万山特区| 贡山| 铜陵市| 淮滨县| 鄂托克前旗| 天水市| 张家口市| 杨浦区| 高唐县|