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

Java中String類(StringBuffer、StringBuilder)相關(guān)(最新推薦)

 更新時(shí)間:2026年01月08日 08:48:26   作者:我會(huì)替風(fēng)去  
Java中的String類是不可變的,存儲(chǔ)在字符串常量池中,提供了多種方法用于操作字符串,為了提高效率,可以使用StringBuilder或StringBuffer,本文介紹Java中String類(StringBuffer、StringBuilder)相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

String是Java中用于表示字符串的類,位于java.lang包下(無需手動(dòng)導(dǎo)入)。

兩個(gè)核心特性:

  • 不可變性(Immutable):String 對(duì)象一旦創(chuàng)建,其內(nèi)部的字符序列就無法被修改??此菩薷淖址牟僮鳎ㄈ缙唇?、替換),本質(zhì)都是創(chuàng)建了一個(gè)新的String對(duì)象。
  • 字符串常量池:直接賦值創(chuàng)建的String對(duì)象會(huì)存入JVM的字符串常量池,目的是復(fù)用相同內(nèi)容的字符串,節(jié)省內(nèi)存。

String對(duì)象的兩種創(chuàng)建方式

public class StringCreateDemo {
    public static void main(String[] args) {
        // 方式1:直接賦值(推薦)—— 從常量池獲取/創(chuàng)建對(duì)象
        String s1 = "Hello";
        String s2 = "Hello";
        // == 比較的是對(duì)象的內(nèi)存地址,s1和s2指向常量池同一個(gè)對(duì)象
        System.out.println(s1 == s2); // 輸出:true
        // 方式2:new關(guān)鍵字 —— 每次new都會(huì)在堆內(nèi)存創(chuàng)建新對(duì)象
        String s3 = new String("Hello");
        String s4 = new String("Hello");
        System.out.println(s3 == s4); // 輸出:false
        // 正確比較字符串內(nèi)容:用equals()方法(String重寫了Object的equals)
        System.out.println(s1.equals(s3)); // 輸出:true
    }
}

String類的常用方法

public class StringMethodsDemo {
    public static void main(String[] args) {
        String str = "  Hello Java!  ";
        // 1. 獲取字符串長(zhǎng)度:length()
        int len = str.length();
        System.out.println("長(zhǎng)度:" + len); // 輸出:14(包含首尾空格)
        // 2. 獲取指定索引的字符:charAt(int index)(索引從0開始)
        char c = str.charAt(3);
        System.out.println("索引3的字符:" + c); // 輸出:l
        // 3. 去除首尾空格:trim()(JDK11+可用strip())
        String trimStr = str.trim();
        System.out.println("去空格后:" + trimStr); // 輸出:Hello Java!
        // 4. 大小寫轉(zhuǎn)換
        String upperStr = trimStr.toUpperCase(); // 轉(zhuǎn)大寫
        String lowerStr = trimStr.toLowerCase(); // 轉(zhuǎn)小寫
        System.out.println("大寫:" + upperStr); // 輸出:HELLO JAVA!
        System.out.println("小寫:" + lowerStr); // 輸出:hello java!
        // 5. 判斷是否包含指定子串:contains(CharSequence s)
        boolean hasJava = trimStr.contains("Java");
        System.out.println("包含Java?" + hasJava); // 輸出:true
        // 6. 截取子串:substring(int beginIndex[, int endIndex])
        // 注意:endIndex是結(jié)束索引(不包含),左閉右開
        String sub1 = trimStr.substring(6); // 從索引6截取到末尾
        String sub2 = trimStr.substring(0, 5); // 截取0-4索引的字符
        System.out.println("sub1:" + sub1); // 輸出:Java!
        System.out.println("sub2:" + sub2); // 輸出:Hello
        // 7. 分割字符串:split(String regex)
        String[] splitArr = trimStr.split(" "); // 按空格分割
        System.out.println("分割后數(shù)組:" + Arrays.toString(splitArr)); // 輸出:[Hello, Java!]
        // 8. 替換字符/子串:replace(CharSequence old, CharSequence new)
        String replaceStr = trimStr.replace("Java", "World");
        System.out.println("替換后:" + replaceStr); // 輸出:Hello World!
        // 9. 判斷字符串是否為空/空白:isEmpty()、isBlank()(JDK11+)
        String emptyStr = "";
        String blankStr = "   ";
        System.out.println(emptyStr.isEmpty()); // 輸出:true
        System.out.println(blankStr.isBlank()); // 輸出:true(JDK11+)
    }
}

String不可變性的影響

  • 因?yàn)镾tring不可變,頻繁拼接字符串(如循環(huán)中str += "xxx")會(huì)創(chuàng)建大量臨時(shí)對(duì)象,效率極低。此時(shí)應(yīng)使用StringBuilder(非線程安全,效率高)或StringBuffer(線程安全,效率稍低)

StringBuffer和StringBuilder

  • 它們是可變的字符序列,底層基于可擴(kuò)容的字符數(shù)組實(shí)現(xiàn),修改(拼接、插入、刪除)時(shí)不會(huì)創(chuàng)建新對(duì)象,而是直接操作底層數(shù)組,效率大幅提升。

StringBuffer和StringBuilder的核心區(qū)別

特性StringBufferStringBuilder
線程安全線程安全(方法加了synchronized鎖)非線程安全(無同步鎖)
執(zhí)行效率稍低(鎖的開銷)更高(無鎖的開銷)
適用場(chǎng)景多線程環(huán)境(如多線程拼接字符串)單線程環(huán)境(日常開發(fā)絕大多數(shù)場(chǎng)景)
誕生版本JDK 1.0JDK 1.5(為彌補(bǔ) StringBuffer 效率問題)

常用方法

import java.util.Arrays;
public class StringBuildBufferDemo {
    public static void main(String[] args) {
        // 1. 創(chuàng)建StringBuilder對(duì)象(初始容量16,可指定容量減少擴(kuò)容次數(shù))
        StringBuilder sb = new StringBuilder(); // 空構(gòu)造,初始容量16
        // StringBuilder sb = new StringBuilder(32); // 指定初始容量,避免頻繁擴(kuò)容
        // 2. 拼接內(nèi)容:append()(核心方法,支持所有數(shù)據(jù)類型)
        sb.append("Hello");
        sb.append(" ");
        sb.append("Java");
        sb.append(8); // 拼接數(shù)字
        System.out.println("拼接后:" + sb); // 輸出:Hello Java8
        // 3. 插入內(nèi)容:insert(int offset, 內(nèi)容)
        sb.insert(6, "My "); // 在索引6的位置插入"My "
        System.out.println("插入后:" + sb); // 輸出:Hello My Java8
        // 4. 替換內(nèi)容:replace(int start, int end, String str)(左閉右開)
        sb.replace(6, 9, "New"); // 替換索引6-8的內(nèi)容為"New"
        System.out.println("替換后:" + sb); // 輸出:Hello New Java8
        // 5. 反轉(zhuǎn)字符串:reverse()
        sb.reverse();
        System.out.println("反轉(zhuǎn)后:" + sb); // 輸出:8avaJ weN olleH
        // 6. 刪除內(nèi)容:delete(int start, int end)
        sb.delete(0, 1); // 刪除索引0的字符(8)
        System.out.println("刪除后:" + sb); // 輸出:avaJ weN olleH
        // 7. 轉(zhuǎn)為String(最終使用時(shí)一般要轉(zhuǎn)成String)
        String finalStr = sb.toString();
        System.out.println("最終String:" + finalStr); // 輸出:avaJ weN olleH
        // 8. 獲取長(zhǎng)度:length()
        System.out.println("當(dāng)前長(zhǎng)度:" + sb.length()); // 輸出:13
        // ================== StringBuffer用法(僅創(chuàng)建方式不同) ==================
        StringBuffer sbf = new StringBuffer("多線程場(chǎng)景");
        sbf.append("使用StringBuffer");
        System.out.println("StringBuffer結(jié)果:" + sbf); // 輸出:多線程場(chǎng)景使用StringBuffer
    }
}

三者對(duì)比

特性StringStringBufferStringBuilder
可變性不可變可變可變
線程安全
性能低(頻繁操作時(shí))
引入版本JDK 1.0JDK 1.0JDK 1.5

總結(jié)

  • 操作少量數(shù)據(jù):用 String。
  • 單線程下操作大量字符串:用 StringBuilder。
  • 多線程下操作大量字符串:用 StringBuffer。
  • 判斷內(nèi)容相等:務(wù)必使用 equals() 而不是 ==。

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

相關(guān)文章

  • 如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包

    如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包

    這篇文章主要介紹了如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • mybatis之嵌套查詢和嵌套結(jié)果有哪些區(qū)別

    mybatis之嵌套查詢和嵌套結(jié)果有哪些區(qū)別

    這篇文章主要介紹了mybatis之嵌套查詢和嵌套結(jié)果有哪些區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式

    SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式

    這篇文章主要介紹了SpringMVC @RequestBody Date類型的Json轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談Java中ArrayList的擴(kuò)容機(jī)制

    淺談Java中ArrayList的擴(kuò)容機(jī)制

    本文主要介紹了淺談Java中ArrayList的擴(kuò)容機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • IDEA2020.3創(chuàng)建web工程的完整步驟

    IDEA2020.3創(chuàng)建web工程的完整步驟

    這篇文章主要給大家介紹了關(guān)于IDEA2020.3創(chuàng)建web工程的完整步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringBoot3實(shí)現(xiàn)MySQL讀寫分離的完整指南

    SpringBoot3實(shí)現(xiàn)MySQL讀寫分離的完整指南

    在高并發(fā)場(chǎng)景下,數(shù)據(jù)庫(kù)往往成為系統(tǒng)瓶頸,讀寫分離通過將寫操作定向到主庫(kù)、讀操作分發(fā)到從庫(kù),顯著提升系統(tǒng)讀性能和數(shù)據(jù)可用性,本文給大家介紹了SpringBoot3實(shí)現(xiàn)MySQL讀寫分離的完整指南,需要的朋友可以參考下
    2025-11-11
  • 簡(jiǎn)單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn)

    簡(jiǎn)單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn)

    這篇文章主要介紹了Java的Socket網(wǎng)絡(luò)編程的多播與廣播實(shí)現(xiàn),包括網(wǎng)絡(luò)編程發(fā)送和接受數(shù)據(jù)的一些基礎(chǔ)知識(shí)整理,需要的朋友可以參考下
    2016-01-01
  • 淺談Java的String中的subString()方法

    淺談Java的String中的subString()方法

    下面小編就為大家?guī)硪黄獪\談Java的String中的subString()方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 關(guān)于spring?boot使用?jdbc+mysql?連接的問題

    關(guān)于spring?boot使用?jdbc+mysql?連接的問題

    這篇文章主要介紹了spring?boot使用?jdbc+mysql?連接,在這里mysql?8.x版本驅(qū)動(dòng)包,要使用?com.mysql.cj.jdbc.Driver作為驅(qū)動(dòng)類,文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-03-03
  • 基于javaMybatis存進(jìn)時(shí)間戳的問題

    基于javaMybatis存進(jìn)時(shí)間戳的問題

    這篇文章主要介紹了javaMybatis存進(jìn)時(shí)間戳的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

交城县| 楚雄市| 崇阳县| 抚宁县| 嘉善县| 宜昌市| 黑水县| 五指山市| 贡山| 调兵山市| 孝义市| 视频| 洛隆县| 天门市| 长春市| 玛多县| 华容县| 桦甸市| 龙里县| 分宜县| 清河县| 商水县| 历史| 巴塘县| 休宁县| 若羌县| 高青县| 库伦旗| 隆昌县| 肃北| 望城县| 灵石县| 泰安市| 南木林县| 施甸县| 商都县| 兴安县| 阿克陶县| 宁南县| 吉木乃县| 阿鲁科尔沁旗|