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

Java字符處理之char、String、StringBuilder和StringBuffer詳解

 更新時間:2026年03月21日 10:10:45   作者:普通網(wǎng)友  
這篇文章主要介紹了Java字符處理之char、String、StringBuilder和StringBuffer的相關(guān)資料,它們各自有著獨(dú)特的特性和適用場景,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

好的,我們來深入解析 Java 中的 char、StringStringBuilderStringBuffer。理解它們之間的區(qū)別對于編寫高效、正確的 Java 代碼至關(guān)重要。

1.char:基本數(shù)據(jù)類型

  • 本質(zhì)char 是 Java 中的基本數(shù)據(jù)類型(Primitive Type),表示一個 16 位無符號 Unicode 字符。它占用 2 個字節(jié)(16 位)內(nèi)存空間。
  • 值范圍:最小值為 \u0000 (即 0),最大值為 \uffff (即 65, 535)。可以表示世界上大多數(shù)字符。
  • 特點(diǎn)
    • 是基本類型,不是對象,沒有方法。
    • 字面值用單引號 ' 表示,例如:char grade = 'A';
    • 可以直接參與算術(shù)運(yùn)算(提升為 int)。
    • 存儲在棧內(nèi)存(如果作為局部變量)或?qū)ο髢?nèi)部。
  • 用途:主要用于表示單個字符。

2.String:不可變的字符序列

  • 本質(zhì)String 是一個 (Class),用于表示不可變的字符序列。它內(nèi)部封裝了一個 char[] 數(shù)組來存儲字符。
  • 核心特性 - 不可變性 (Immutability)
    • 一旦 String 對象被創(chuàng)建,其包含的字符序列 就不能被更改。任何看似修改 String 的操作(如 concat, substring, toUpperCase, replace 等),實(shí)際上都是 創(chuàng)建并返回一個全新的 String 對象。
    • 優(yōu)點(diǎn)
      • 線程安全:由于不可變,多個線程可以安全地共享同一個 String 對象,無需同步。
      • 緩存與優(yōu)化:Java 使用“字符串常量池”(String Pool)來緩存字符串字面量,減少重復(fù)創(chuàng)建的開銷。例如:
        String s1 = "hello"; // 可能從池中獲取
        String s2 = "hello"; // 指向池中同一個對象
        String s3 = new String("hello"); // 強(qiáng)制在堆上創(chuàng)建新對象
        
      • 安全性:常用于敏感信息(如密碼)的傳遞,因為不可變,避免了內(nèi)容被意外修改的風(fēng)險。
      • HashCode 穩(wěn)定性StringhashCode() 值在對象創(chuàng)建時計算一次并緩存,后續(xù)調(diào)用直接返回緩存值,效率高且穩(wěn)定,非常適合作為哈希表的鍵(如 HashMap)。
    • 缺點(diǎn)
      • 頻繁修改效率低:每次“修改”都會產(chǎn)生新的對象,如果在一個循環(huán)中反復(fù)拼接字符串,會產(chǎn)生大量中間臨時對象,增加 GC 壓力。
  • 創(chuàng)建方式
    • 字面量:String s = "abc"; (優(yōu)先使用常量池)
    • 構(gòu)造函數(shù):String s = new String("abc"); (在堆上新建對象)
    • 字符數(shù)組:char[] data = {'a', 'b', 'c'}; String str = new String(data);
    • + 運(yùn)算符拼接(底層可能編譯優(yōu)化為 StringBuilder)。
  • 常用方法length(), charAt(int index), concat(String str), equals(Object anObject), indexOf(String str), substring(int beginIndex), toLowerCase(), toUpperCase(), trim(), split(String regex) 等。

3.StringBuilder:可變的字符序列 (非線程安全)

  • 本質(zhì)StringBuilder 也是一個類,用于表示 可變的字符序列。它也封裝了一個 char[] 數(shù)組(稱為緩沖區(qū))。
  • 核心特性 - 可變性 (Mutability)
    • 對象內(nèi)部的字符序列 可以被修改。修改操作(如 append, insert, delete, replace)直接在原有緩沖區(qū)上進(jìn)行,不會創(chuàng)建新對象(除非緩沖區(qū)容量不足需要擴(kuò)容)。
  • 特點(diǎn)
    • 高效修改:非常適合在循環(huán)中或需要多次修改字符串內(nèi)容的場景(如日志拼接、動態(tài) SQL 生成),避免了 String 拼接帶來的性能問題。
    • 非線程安全StringBuilder 的方法 沒有 進(jìn)行同步(synchronized)處理。如果多個線程同時修改同一個 StringBuilder 實(shí)例,可能會導(dǎo)致數(shù)據(jù)不一致。因此,它適用于 單線程環(huán)境
    • 創(chuàng)建:通常通過構(gòu)造函數(shù) new StringBuilder()new StringBuilder(String str) 創(chuàng)建。
    • 最終字符串獲取:通過 toString() 方法獲取最終的不可變 String 對象。
  • 常用方法append(...)(多種重載,支持基本類型、對象等), insert(int offset, ...), delete(int start, int end), replace(int start, int end, String str), reverse(), setCharAt(int index, char ch), toString()

4.StringBuffer:可變的字符序列 (線程安全)

  • 本質(zhì)StringBufferStringBuilder線程安全版本。它也用于表示可變的字符序列。
  • 核心特性 - 可變性與線程安全
    • 對象內(nèi)部的字符序列可以被修改。
    • 所有對 StringBuffer 進(jìn)行修改的公共方法(如 append, insert, delete, replace)都使用了 synchronized 關(guān)鍵字進(jìn)行同步,保證了在 多線程環(huán)境 下的操作安全。
  • 特點(diǎn)
    • 線程安全:可以在多線程環(huán)境下安全地修改同一個 StringBuffer 實(shí)例。
    • 性能開銷:由于同步鎖的存在,StringBuffer 的操作性能通常 低于 StringBuilder。在單線程環(huán)境中使用 StringBuffer 會帶來不必要的性能損失。
    • 創(chuàng)建與獲取:用法與 StringBuilder 類似,通過構(gòu)造函數(shù)創(chuàng)建,通過 toString() 獲取最終 String
  • 歷史StringBuffer 是 JDK 1.0 就存在的類。StringBuilder 是在 JDK 1.5 引入的,作為 StringBuffer 的非線程安全替代品,旨在提高單線程下的性能。

總結(jié)對比表

特性charStringStringBuilderStringBuffer
類型基本數(shù)據(jù)類型類 (不可變)類 (可變)類 (可變)
可變性值可變不可變可變可變
線程安全不適用 (基本類型) (因不可變) (同步方法)
性能 (修改)低 (創(chuàng)建新對象) (單線程)中低 (因同步)
適用場景單個字符常量字符串、鍵值、方法參數(shù)傳遞等單線程下頻繁修改字符串多線程下頻繁修改字符串
創(chuàng)建方式字面量 'A'字面量 "abc" / new String(...)new StringBuilder()new StringBuffer()
最終字符串-自身toString()toString()

選用建議

  1. 單個字符:使用 char
  2. 不常修改的字符串:優(yōu)先使用 String(利用常量池、線程安全、HashCode 穩(wěn)定等優(yōu)點(diǎn))。
  3. 單線程下頻繁修改字符串強(qiáng)烈推薦使用 StringBuilder(性能最優(yōu))。
  4. 多線程下頻繁修改字符串:使用 StringBuffer(保證線程安全)。
  5. 簡單拼接:少量固定字符串拼接可用 String+(編譯器可能會優(yōu)化成 StringBuilder)。大量或循環(huán)拼接務(wù)必使用 StringBuilder/StringBuffer

理解它們的設(shè)計意圖和優(yōu)缺點(diǎn),有助于你在不同場景下做出最合適的選擇,寫出更高效、更健壯的 Java 代碼。

總結(jié)

到此這篇關(guān)于Java字符處理之char、String、StringBuilder和StringBuffer的文章就介紹到這了,更多相關(guān)Java字符處理char、String與StringBuilder內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍

    關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍

    這篇文章主要介紹了關(guān)于java中基本數(shù)據(jù)類型的數(shù)值范圍,基本類型,或者叫做內(nèi)置類型,是JAVA中不同于類的特殊類型,它們是我們編程中使用最頻繁的類型,需要的朋友可以參考下
    2023-07-07
  • Spring boot中使用Spring-data-jpa方便快捷的訪問數(shù)據(jù)庫(推薦)

    Spring boot中使用Spring-data-jpa方便快捷的訪問數(shù)據(jù)庫(推薦)

    Spring Data JPA 是 Spring 基于 ORM 框架、JPA 規(guī)范的基礎(chǔ)上封裝的一套JPA應(yīng)用框架,可使開發(fā)者用極簡的代碼即可實(shí)現(xiàn)對數(shù)據(jù)的訪問和操作。這篇文章主要介紹了Spring-boot中使用Spring-data-jpa方便快捷的訪問數(shù)據(jù)庫,需要的朋友可以參考下
    2018-05-05
  • 關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用

    關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用

    這篇文章主要介紹了關(guān)于重寫equals()方法和hashCode()方法及其簡單的應(yīng)用,網(wǎng)上的知識有些可能是錯誤的,關(guān)于?equals()?方法的理解,大家討論不一樣,需要的朋友可以參考下
    2023-04-04
  • maven項目pom.xml中parent標(biāo)簽的使用小結(jié)

    maven項目pom.xml中parent標(biāo)簽的使用小結(jié)

    使用maven是為了更好的幫項目管理包依賴,maven的核心就是pom.xml,當(dāng)我們需要引入一個jar包時,在pom文件中加上就可以從倉庫中依賴到相應(yīng)的jar包,本文就來介紹一下maven項目pom.xml中parent標(biāo)簽的使用小結(jié),感興趣的可以了解一下
    2023-12-12
  • java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明

    java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明

    這篇文章主要介紹了java Long類型轉(zhuǎn)為String類型的兩種方式及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 單向隊列及環(huán)形隊列的實(shí)現(xiàn)原理

    Java 單向隊列及環(huán)形隊列的實(shí)現(xiàn)原理

    本文主要介紹了Java 單向隊列及環(huán)形隊列的實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問)

    SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問)

    這篇文章主要介紹了SpringBoot服務(wù)監(jiān)控機(jī)制原理解析(面試官常問),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Springboot使用jsp具體案例解析

    Springboot使用jsp具體案例解析

    這篇文章主要介紹了Springboot使用jsp具體案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • LinkList的底層數(shù)據(jù)結(jié)構(gòu)及優(yōu)缺點(diǎn)詳解

    LinkList的底層數(shù)據(jù)結(jié)構(gòu)及優(yōu)缺點(diǎn)詳解

    鏈表由節(jié)點(diǎn)組成,每個節(jié)點(diǎn)包含數(shù)據(jù)域和指針域,節(jié)點(diǎn)在內(nèi)存中非連續(xù)分布,通過指針鏈接形成邏輯上的線性關(guān)系,鏈表支持動態(tài)大小、高效插入/刪除,但隨機(jī)訪問效率低,且需要手動管理指針
    2025-11-11
  • Spring Boot  Excel文件導(dǎo)出下載實(shí)現(xiàn)代碼

    Spring Boot Excel文件導(dǎo)出下載實(shí)現(xiàn)代碼

    這篇文章帶領(lǐng)我們直接實(shí)現(xiàn)Excel文件的直接導(dǎo)出下載,后續(xù)開發(fā)不需要開發(fā)很多代碼,直接繼承已經(jīng)寫好的代碼,增加一個Xml配置就可以直接導(dǎo)出。具體實(shí)現(xiàn)代碼大家跟隨小編一起通過本文學(xué)習(xí)吧
    2018-11-11

最新評論

耒阳市| 怀远县| 陵川县| 金塔县| 诸城市| 南宁市| 富裕县| 慈溪市| 德昌县| 平江县| 永济市| 拜城县| 鄯善县| 兴安县| 阳西县| 白银市| 隆化县| 思茅市| 芦溪县| 迁西县| 马龙县| 天台县| 定边县| 陇川县| 长武县| 濉溪县| 乌恰县| 深圳市| 新闻| 贵港市| 清镇市| 双鸭山市| 新宾| 衡南县| 正宁县| 四平市| 桃江县| 霍城县| 诸城市| 田东县| 姚安县|