欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

從聲明定義上來談

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

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

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

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

StringBuffer 和 StringBuilder 都繼承自抽象類AbstractStringBuilder

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

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

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

String

StringBuffer

StringBuilder

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

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

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

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

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

從線程安全來談

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

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

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

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

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

這個(gè)方法的返回值類型是String,并沒有改變?cè)瓉鞸tringBuffer對(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í)并沒有去改變StringBuffer的值

總結(jié)

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

相關(guān)文章

  • Java堆排序算法詳解

    Java堆排序算法詳解

    這篇文章主要為大家詳細(xì)介紹了Java堆排序算法的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值

    java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值

    這篇文章主要介紹了java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何基于JavaFX開發(fā)桌面程序

    如何基于JavaFX開發(fā)桌面程序

    這篇文章主要介紹了如何基于JavaFX開發(fā)桌面程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解Java的日期時(shí)間新特性

    詳解Java的日期時(shí)間新特性

    隨著時(shí)間的不斷推移,現(xiàn)實(shí)的需求也在不斷更新,原先的一些API已經(jīng)難以滿足開發(fā)需求了,從JDK?8之后,為了滿足更多的開發(fā)需求,Java給我們?cè)黾恿瞬簧訇P(guān)于日期時(shí)間的新特性,接下來就帶各位來看看這些新特性有哪些,需要的朋友可以參考下
    2023-06-06
  • Java單例模式的幾種常見寫法

    Java單例模式的幾種常見寫法

    這篇文章主要介紹了Java單例模式的幾種寫法,單例模式是面試中的??土?,常見寫法有?4?種:餓漢模式、懶漢模式、靜態(tài)內(nèi)部類和枚舉,接下來我們一起進(jìn)入文章看看吧
    2022-05-05
  • IDEA高效使用設(shè)置指南

    IDEA高效使用設(shè)置指南

    本文主要為大家介紹了關(guān)于IDEA高效的設(shè)置指南,其中包含必備的一些插件推薦以及主題優(yōu)化還有IDEA源碼的閱讀技巧,干貨滿滿,有需要的朋友可以借鑒參考下
    2022-01-01
  • 詳解JAVA中接口的定義和接口的實(shí)現(xiàn)

    詳解JAVA中接口的定義和接口的實(shí)現(xiàn)

    這篇文章主要介紹了JAVA中接口的定義和接口的實(shí)現(xiàn),文中講解非常細(xì)致,配合代碼更好的幫大家學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06
  • MyBatis關(guān)閉一級(jí)緩存的兩種方式(分注解和xml兩種方式)

    MyBatis關(guān)閉一級(jí)緩存的兩種方式(分注解和xml兩種方式)

    這篇文章主要介紹了MyBatis關(guān)閉一級(jí)緩存的兩種方式(分注解和xml兩種方式),mybatis默認(rèn)開啟一級(jí)緩存,執(zhí)行2次相同sql,但是第一次查詢sql結(jié)果會(huì)加工處理這個(gè)時(shí)候需要關(guān)閉一級(jí)緩存,本文給大家詳細(xì)講解需要的朋友可以參考下
    2022-11-11
  • Java中String類使用方法總結(jié)

    Java中String類使用方法總結(jié)

    這篇文章主要介紹了Java中String類的使用方法,文章簡(jiǎn)單易懂,結(jié)尾有實(shí)例代碼幫助大家理解學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲示例

    Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的簡(jiǎn)單擲骰子游戲,涉及Java隨機(jī)數(shù)的簡(jiǎn)單生成、運(yùn)算與判定相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01

最新評(píng)論