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

Java 中 String、StringBuffer、StringBuilder 的區(qū)別

 更新時間:2026年05月20日 15:08:18   作者:Xiacqi1  
本文主要介紹了Java 中 String、StringBuffer、StringBuilder 的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

核心區(qū)別概覽

特性StringStringBufferStringBuilder
可變性不可變可變可變
線程安全安全(不可變)安全(方法加同步鎖)不安全
性能最差(頻繁創(chuàng)建對象)中等最好
使用場景少量拼接、常量多線程拼接單線程拼接

詳細對比

1. 可變性

String 是不可變類(immutable)。每次對 String 進行修改(如 += 拼接)時,都會創(chuàng)建一個新的 String 對象,舊對象被丟棄。

String s = "";
for (int i = 0; i < 100000; i++) {
    s += 'a';  // 每次循環(huán)都創(chuàng)建新對象,性能極差
}

StringBufferStringBuilder 都是可變類(mutable)。它們內部維護一個字符數(shù)組,append 操作直接修改數(shù)組內容,不會創(chuàng)建新對象。

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
    sb.append('a');  // 直接修改內部數(shù)組
}

StringBuffer sf = new StringBuffer();  
for (int i = 0; i < 100000; i++){  
    sf.append('a');  
}

2. 線程安全性

String 因為不可變,天然線程安全。

StringBuffer 的關鍵方法都加了 synchronized 關鍵字,保證多線程環(huán)境下的數(shù)據(jù)一致性:

// 可以拿這個玩一下10線程搶占
public static void StringBufferPool() throws InterruptedException{  
    String[] aToz = new String[]{  
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"  
    };  
  
    //10線程  
    Runnable task = ()->{  
        StringBuffer sb = new StringBuffer();  
  
        for(int i=0;i<10;i++){  
            sb.append(aToz[(int) (Math.random()*26)]);  
            System.out.println(Thread.currentThread().getName()+"當前字符:"+sb.toString());  
        }  
    };  
  
    ExecutorService es = Executors.newFixedThreadPool(10);  
    for (int k = 0; k< 10 ;k++){  
        es.execute(task);  
    }  
  
    es.shutdown();  
    es.awaitTermination(100000, TimeUnit.MILLISECONDS);  
}

部分結果

pool-1-thread-2當前字符:r
pool-1-thread-10當前字符:b
pool-1-thread-10當前字符:bc
pool-1-thread-10當前字符:bcc
pool-1-thread-9當前字符:d
pool-1-thread-4當前字符:j
pool-1-thread-5當前字符:d
pool-1-thread-5當前字符:df
pool-1-thread-5當前字符:dfm
pool-1-thread-7當前字符:p

StringBuilder 沒有同步機制,線程不安全,但因此性能更高。

3. 性能對比

類型耗時(毫秒)原因
String3883每次拼接創(chuàng)建新對象,GC 壓力大
StringBuffer48有同步開銷
StringBuilder2無同步開銷,性能最優(yōu)

3883
2
48

4. 使用場景

  • String:字符串內容不經(jīng)常變化的場景,如常量、少量拼接
  • StringBuffer:多線程環(huán)境下的字符串拼接
  • StringBuilder:單線程環(huán)境下的字符串拼接(推薦

總結

  1. 單線程拼接:優(yōu)先使用 StringBuilder
  2. 多線程拼接:使用 StringBuffer
  3. 避免:在循環(huán)中使用 String 進行大量拼接

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

相關文章

  • 掃二維碼自動跳轉【java】詳解

    掃二維碼自動跳轉【java】詳解

    這篇文章主要介紹了java掃二維碼自動跳轉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • 在Spring Boot中使用swagger-bootstrap-ui的方法

    在Spring Boot中使用swagger-bootstrap-ui的方法

    這篇文章主要介紹了在Spring Boot中使用swagger-bootstrap-ui的方法,需要的朋友可以參考下
    2018-01-01
  • Spring Boot 監(jiān)聽器Listeners詳細教程(最新整理)

    Spring Boot 監(jiān)聽器Listeners詳細教程(最新整理)

    SpringBoot監(jiān)聽器基于Spring事件機制,用于響應應用狀態(tài)變化,內置事件涵蓋啟動、關閉等生命周期,支持自定義事件定義,本文給大家介紹Spring Boot 監(jiān)聽器Listeners詳細教程,感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot數(shù)據(jù)脫敏的實現(xiàn)示例

    SpringBoot數(shù)據(jù)脫敏的實現(xiàn)示例

    數(shù)據(jù)脫敏主要應用在客戶安全數(shù)據(jù)或商業(yè)性敏感數(shù)據(jù)的情況,本文主要介紹了SpringBoot數(shù)據(jù)脫敏的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 如何將Java打開CSV文件到JTable展示

    如何將Java打開CSV文件到JTable展示

    本文主要介紹了如何將Java打開CSV文件到JTable展示,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • MybatisPlus代碼生成器使用示例

    MybatisPlus代碼生成器使用示例

    MyBatis-Plus自動化的生成與數(shù)據(jù)庫表對應的Java代碼文件,本文主要介紹了MybatisPlus代碼生成器使用示例,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Java編程—在測試中考慮多態(tài)

    Java編程—在測試中考慮多態(tài)

    這篇文章主要介紹了Java編程—在測試中考慮多態(tài),具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 使用JDBC4.0操作XML類型的字段(保存獲取xml數(shù)據(jù))的方法

    使用JDBC4.0操作XML類型的字段(保存獲取xml數(shù)據(jù))的方法

    jdbc4.0最重要的特征是支持xml數(shù)據(jù)類型,接下來通過本文重點給大家介紹如何使用jdbc4.0操作xml類型的字段,對jdbc4.0 xml相關知識感興趣的朋友一起看下吧
    2016-08-08
  • 深入淺出講解Java中的枚舉類

    深入淺出講解Java中的枚舉類

    這篇文章主要介紹了深入淺出講解Java中的枚舉類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 淺談Java中BigDecimal類的簡單應用

    淺談Java中BigDecimal類的簡單應用

    這篇文章主要介紹了淺談Java中BigDecimal類的簡單應用,BigDecimal是由任意精度的整數(shù)非標度值和32位的整數(shù)標度組成,如果為零或正數(shù),則標度是小數(shù)點后的位數(shù),如果為負數(shù),則將該數(shù)的非標度值乘以?10的負scale次冪,需要的朋友可以參考下
    2023-07-07

最新評論

襄城县| 玛多县| 桐梓县| 新巴尔虎右旗| 寿宁县| 岳普湖县| 抚宁县| 丽水市| 班戈县| 门头沟区| 吉安县| 七台河市| 新郑市| 武隆县| 漳平市| 肇东市| 泽库县| 上虞市| 聂荣县| 仪征市| 乌兰县| 岱山县| 碌曲县| 绥棱县| 于都县| 漳平市| 九龙坡区| 阿拉善右旗| 保山市| 吴堡县| 竹北市| 溆浦县| 宜昌市| 澄迈县| 凭祥市| 古丈县| 苍山县| 贵德县| 贡觉县| 江陵县| 若尔盖县|