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

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

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

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

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

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

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

  • 本質(zhì)String 是一個(gè) (Class),用于表示不可變的字符序列。它內(nèi)部封裝了一個(gè) char[] 數(shù)組來存儲(chǔ)字符。
  • 核心特性 - 不可變性 (Immutability)
    • 一旦 String 對象被創(chuàng)建,其包含的字符序列 就不能被更改。任何看似修改 String 的操作(如 concat, substring, toUpperCase, replace 等),實(shí)際上都是 創(chuàng)建并返回一個(gè)全新的 String 對象。
    • 優(yōu)點(diǎn)
      • 線程安全:由于不可變,多個(gè)線程可以安全地共享同一個(gè) String 對象,無需同步。
      • 緩存與優(yōu)化:Java 使用“字符串常量池”(String Pool)來緩存字符串字面量,減少重復(fù)創(chuàng)建的開銷。例如:
        String s1 = "hello"; // 可能從池中獲取
        String s2 = "hello"; // 指向池中同一個(gè)對象
        String s3 = new String("hello"); // 強(qiáng)制在堆上創(chuàng)建新對象
        
      • 安全性:常用于敏感信息(如密碼)的傳遞,因?yàn)椴豢勺儯苊饬藘?nèi)容被意外修改的風(fēng)險(xiǎn)。
      • HashCode 穩(wěn)定性StringhashCode() 值在對象創(chuàng)建時(shí)計(jì)算一次并緩存,后續(xù)調(diào)用直接返回緩存值,效率高且穩(wěn)定,非常適合作為哈希表的鍵(如 HashMap)。
    • 缺點(diǎn)
      • 頻繁修改效率低:每次“修改”都會(huì)產(chǎn)生新的對象,如果在一個(gè)循環(huán)中反復(fù)拼接字符串,會(huì)產(chǎn)生大量中間臨時(shí)對象,增加 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 也是一個(gè)類,用于表示 可變的字符序列。它也封裝了一個(gè) char[] 數(shù)組(稱為緩沖區(qū))。
  • 核心特性 - 可變性 (Mutability)
    • 對象內(nèi)部的字符序列 可以被修改。修改操作(如 append, insert, delete, replace)直接在原有緩沖區(qū)上進(jìn)行,不會(huì)創(chuàng)建新對象(除非緩沖區(qū)容量不足需要擴(kuò)容)。
  • 特點(diǎn)
    • 高效修改:非常適合在循環(huán)中或需要多次修改字符串內(nèi)容的場景(如日志拼接、動(dòng)態(tài) SQL 生成),避免了 String 拼接帶來的性能問題。
    • 非線程安全StringBuilder 的方法 沒有 進(jìn)行同步(synchronized)處理。如果多個(gè)線程同時(shí)修改同一個(gè) StringBuilder 實(shí)例,可能會(huì)導(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)境下安全地修改同一個(gè) StringBuffer 實(shí)例。
    • 性能開銷:由于同步鎖的存在,StringBuffer 的操作性能通常 低于 StringBuilder。在單線程環(huán)境中使用 StringBuffer 會(huì)帶來不必要的性能損失。
    • 創(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)建新對象) (單線程)中低 (因同步)
適用場景單個(gè)字符常量字符串、鍵值、方法參數(shù)傳遞等單線程下頻繁修改字符串多線程下頻繁修改字符串
創(chuàng)建方式字面量 'A'字面量 "abc" / new String(...)new StringBuilder()new StringBuffer()
最終字符串-自身toString()toString()

選用建議

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

理解它們的設(shè)計(jì)意圖和優(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)上的知識有些可能是錯(cuò)誤的,關(guān)于?equals()?方法的理解,大家討論不一樣,需要的朋友可以參考下
    2023-04-04
  • maven項(xiàng)目pom.xml中parent標(biāo)簽的使用小結(jié)

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

    使用maven是為了更好的幫項(xiàng)目管理包依賴,maven的核心就是pom.xml,當(dāng)我們需要引入一個(gè)jar包時(shí),在pom文件中加上就可以從倉庫中依賴到相應(yīng)的jar包,本文就來介紹一下maven項(xiàng)目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ū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 單向隊(duì)列及環(huán)形隊(duì)列的實(shí)現(xiàn)原理

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

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

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

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

    Springboot使用jsp具體案例解析

    這篇文章主要介紹了Springboot使用jsp具體案例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    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)組成,每個(gè)節(jié)點(diǎn)包含數(shù)據(jù)域和指針域,節(jié)點(diǎn)在內(nèi)存中非連續(xù)分布,通過指針鏈接形成邏輯上的線性關(guān)系,鏈表支持動(dòng)態(tài)大小、高效插入/刪除,但隨機(jī)訪問效率低,且需要手動(dòng)管理指針
    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)寫好的代碼,增加一個(gè)Xml配置就可以直接導(dǎo)出。具體實(shí)現(xiàn)代碼大家跟隨小編一起通過本文學(xué)習(xí)吧
    2018-11-11

最新評論

蕉岭县| 百色市| 栖霞市| 崇左市| 亳州市| 开鲁县| 大理市| 兴化市| 泾源县| 中方县| 济阳县| 黑山县| 分宜县| 安宁市| 南雄市| 灌阳县| 五华县| 弥勒县| 广德县| 武陟县| 灵石县| 宁远县| 河源市| 肇州县| 梅州市| 德州市| 延寿县| 龙江县| 江达县| 神农架林区| 富蕴县| 敖汉旗| 溆浦县| 扎赉特旗| 东山县| 时尚| 青神县| 西峡县| 渭源县| 来宾市| 宕昌县|