Java中 String、StringBuilder 和 StringBuffer 的區別?

在Java中,StringStringBuilder?和?StringBuffer?都用于處理字符串,但它們在可變性線程安全性性能上有顯著區別。以下是它們的對比:


1.?String

  • 不可變性(Immutable)
    String?對象一旦創建,內容不可修改。任何修改操作(如拼接、替換)都會生成新的?String?對象。

    java

    String s = "hello";
    s += " world"; // 創建新對象,原對象"hello"不變
  • 線程安全
    由于不可變,String?是線程安全的。
  • 性能問題
    頻繁修改字符串(如循環拼接)會產生大量臨時對象,影響性能。

2.?StringBuilder

  • 可變性(Mutable)
    StringBuilder?的內容可以修改,直接在原對象上操作,不會創建新對象。

    java

    StringBuilder sb = new StringBuilder("hello");
    sb.append(" world"); // 直接修改原對象
  • 非線程安全
    方法未加同步鎖,多線程環境下不安全。
  • 高性能
    適合單線程下的頻繁字符串操作(如循環拼接)。

3.?StringBuffer

  • 可變性(Mutable)
    與?StringBuilder?類似,內容可修改。

    java

    StringBuffer sb = new StringBuffer("hello");
    sb.append(" world"); // 直接修改原對象
  • 線程安全
    方法通過?synchronized?加鎖,保證多線程安全,但性能略低。
  • 適用場景
    需要線程安全的字符串操作(如全局共享的字符串緩沖區)。

對比總結

特性StringStringBuilderStringBuffer
可變性不可變可變可變
線程安全
性能低(頻繁修改)高(單線程)較低(線程安全開銷)
適用場景字符串常量單線程頻繁修改多線程字符串操作

如何選擇?

  1. 優先用?String:字符串內容不變化或初始化后不再修改時(如配置信息)。
  2. 單線程頻繁修改:用?StringBuilder(如循環拼接字符串)。
  3. 多線程環境:用?StringBuffer(或通過局部變量避免共享)。

示例代碼

java

// String 拼接(產生多個對象)
String s = "a";
for (int i = 0; i < 10; i++) {
s += "b"; // 每次循環創建新對象
}
// StringBuilder(高效單線程拼接)
StringBuilder sb = new StringBuilder("a");
for (int i = 0; i < 10; i++) {
sb.append("b"); // 直接修改原對象
}
// StringBuffer(線程安全拼接)
StringBuffer sbf = new StringBuffer("a");
synchronized(sbf) { // 手動同步(非必須,append本身是線程安全的)
sbf.append("b");
}

理解這些區別有助于根據場景選擇最優的字符串處理方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921081.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAM TTS網頁官網入口 – 在線版微軟tts在線語音合成助手

SAM TTS 是一個免費好用的在線版微軟語音合成助手&#xff0c;源自經典的 Windows XP 系統。它通過現代的 JavaScript 技術以在線工具的形式運行&#xff0c;讓用戶可以直接在線進行語音合成。SAM TTS 不僅保留了 Microsoft SAM 的標志性聲音&#xff0c;還新增了更多的自定義選…

2025 大數據時代值得考的證書排名前八?

在大數據時代&#xff0c;數據處理和分析能力愈發關鍵&#xff0c;考取相關證書能提升職場競爭力。接下來將為大家介紹 2025 年大數據領域值得考取的證書&#xff0c;從含金量、企業認可度、就業方向和薪資等方面分析&#xff0c;助你明晰職業發展路徑。CDA 數據分析師認證1、C…

淺談linux內存管理 的RMAP機制的作用和原理

Linux 內存管理中的 RMAP 機制深度解析反向映射&#xff08;Reverse Mapping, RMAP&#xff09;是 Linux 內存管理中的核心機制&#xff0c;它解決了大型系統中內存管理的效率和擴展性問題。本解析將從作用原理、演進歷史、數據結構和工作流程四個維度深入講解。一、RMAP 核心作…

Duolingo「多鄰國」v6.45.3 高級版

Duolingo「多鄰國」是一款著名的語言學習應用&#xff0c;可以借助它學習西班牙語&#xff0c;法語&#xff0c;德語&#xff0c;意大利語&#xff0c;俄語&#xff0c;羅馬尼亞語&#xff0c;葡萄牙語&#xff0c;土耳其語&#xff0c;荷蘭語&#xff0c;愛爾蘭語&#xff0c;…

【Unity Shader學習筆記】(五)Unity Shader初識

一、Shader是什么&#xff1f;Shader&#xff08;著色器&#xff09;是一段運行在GPU&#xff08;圖形處理器&#xff09;上的特殊程序&#xff0c;它用于控制渲染管線的特定階段&#xff0c;最終決定物體在屏幕上的最終顏色和效果。與傳統運行在CPU上的程序不同&#xff0c;Sh…

計算機視覺與深度學習 | 雙目立體特征提取與匹配算法綜述——理論基礎、OpenCV實踐與MATLAB實現指南

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 文章目錄 引言 ?? 核心研究問題 理論框架 1. 相機幾何模型 2. 特征提…

每青春千度硒仙人掌精粹液:從日常滴飲開始,調出好氣色好體質

每天的狀態&#xff0c;其實是由許多細節組成的。身體不舒服、情緒波動、氣色黯淡&#xff0c;很可能都是體內節奏被打亂的信號。開始在日常中加入幾滴每青春千度硒精粹液&#xff0c;是一種小小的嘗試&#xff0c;慢慢發現&#xff0c;狀態真的在悄悄發生改變。簡單滴飲&#…

< 自用文 主機 USC 記錄:> 發現正在被攻擊 后的自救

環境&#xff1a; 一臺 VPS&#xff0c;之前文章推薦過 $1/月 OS: Ubuntu 內存&#xff1a;961MB CPU: 1CORE 上面都是學習 Python 時寫的應用&#xff0c;這些應用在 CSDN 都有原碼&#xff0c;只是時間久了&#xff0c;自用的有修復bugs&#xff0c;還有些功能升級。 以前是…

硬件開發1-51單片機2-按鍵、中斷

一、GPIO&#xff08;General Purpose Input/Output&#xff09;GPIO 是 51 單片機和外界交互最基本的方式。工作模式&#xff1a;輸出模式&#xff1a;單片機給定引腳一個電平&#xff08;高電平 (5V)、低電平 (0V)&#xff09;&#xff0c;通過控制引腳實現高低電平輸出。輸入…

什么是Token?——理解自然語言處理中的基本單位

在日常生活中&#xff0c;我們使用手機語音助手、自動翻譯軟件和聊天機器人等智能工具&#xff0c;而這些技術背后都離不開對語言的精細處理。今天&#xff0c;我們就來聊聊“token”這一看似專業的術語&#xff0c;了解它在自然語言處理&#xff08;NLP&#xff09;中的重要作…

線程通信機制

目錄 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 二、子線程向主線程返回數據 2.1 通過共享變量方式 2.2 同步塊中使用wait/notify機制 2.3 Lock和Condition實現線程通信機制 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 通過構造函數傳遞參數…

硬盤 (FOREIGN) Slot:Unconfigured Bad

IBM 服務器硬盤故障&#xff0c;在webbios里看到有顯示&#xff08;Foreign&#xff09;Slot:xxxx, Unconfigured Bad的硬盤&#xff0c;選中該硬盤進入屬性頁面在屬性列表中找到“Media Error”和“Pred Fail Count”兩項&#xff08;如果找不到請點擊【Next】翻頁&#xff09…

Vite 環境變量與全局變量詳解

目錄 一、什么是環境變量&#xff1f; 二、Vite 的環境變量機制 1. .env 文件 2. 定義環境變量 3. 使用環境變量 4. 內置環境變量 三、Vite 中的全局變量 1. 使用 define 配置 2. 使用 TypeScript 聲明 四、環境變量 vs 全局變量 五、常見問題與坑點 1. 為什么必須…

華為S5720交換機配置教程:開啟Web管理功能

華為S5720交換機Web登錄配置指南 華為S5720系列交換機支持通過Web界面進行管理&#xff0c;這是一種圖形化的操作方式&#xff0c;比命令行更直觀易用。以下是配置S5720交換機開啟Web登錄的詳細步驟。 一、準備工作 連接設備&#xff1a;使用Console線連接交換機的Console…

插入排序及希爾排序

插入排序是一種十分簡單有效的排序算法&#xff0c;其基本思想就是將每一個待排序的數據按照關鍵字大小插入前邊已經排好序的子序列之中。 文章目錄最基本的插入排序折半插入排序希爾排序 最基本的插入排序 插入排序的基本思想如圖可以看出&#xff0c;不斷選中數組中的元素&am…

碼農必備!本地調試神器act,GitHub Actions最佳拍檔

引言 在現代軟件開發實踐中&#xff0c;持續集成和持續部署(CI/CD)已成為不可或缺的環節。GitHub Actions 作為 GitHub 官方提供的 CI/CD 解決方案&#xff0c;憑借其與代碼倉庫的深度集成和豐富的生態系統&#xff0c;獲得了廣大開發者的青睞。然而&#xff0c;每次修改 CI/C…

大模型本地部署與API服務教程

大模型本地部署與API服務教程 目標&#xff1a;在Ubuntu服務器部署本地大模型&#xff0c;并提供API服務&#xff0c;支持局域網下的Windows客戶端調用。 支持兩種部署方式&#xff1a;① 自建FastAPI服務&#xff08;高定制&#xff09; ② 使用Ollama&#xff08;極簡快速&am…

亞馬遜美加站點物流新規解讀:庫存處理邏輯重構與賣家應對策略

2025年9月&#xff0c;亞馬遜美國與加拿大站點即將實施物流計劃強制調整&#xff0c;批量清貨與捐贈計劃的規則迭代&#xff0c;標志著平臺對庫存生命周期管理的重視程度提升&#xff0c;此次新規以“可持續發展”為核心導向&#xff0c;通過強制與默認參與的雙重機制&#xff…

SpringBoot Web 入門指南:從零搭建第一個SpringBoot程序

SpringBoot Web 入門指南&#xff1a;從零搭建第一個SpringBoot程序SpringBoot Web 入門指南&#xff1a;從零搭建第一個SpringBoot程序一、Web開發基礎&#xff1a;靜態/動態資源與B/S、C/S架構解析?資源類型系統架構二、Spring 與 Spring Boot 核心介紹1. Spring 框架2. Spr…

從圖靈完備性到現實差距:為什么你的設備和你本人都潛力無限,卻表現各異?

理論上的無限潛力&#xff0c;為何被困在現實的牢籠中&#xff1f;一、引言&#xff1a;一個反直覺的概念 在計算機科學中&#xff0c;圖靈完備性&#xff08;Turing Completeness&#xff09; 是衡量一個系統計算能力的黃金標準。它得名于計算機科學之父艾倫圖靈&#xff08;A…