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

Java中StringBuilder超詳細(xì)講解(附實例代碼)

 更新時間:2026年03月18日 09:39:12   作者:定仙游453  
在Java中StringBuilder是一個非常有用的類,用于高效操作可變字符串,這篇文章主要介紹了Java中StringBuilder超詳細(xì)講解的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、為什么要學(xué)StringBuilder?先搞懂核心痛點

Java 中的 String 字符串是【不可變】的 !

不可變:指一個String對象一旦創(chuàng)建,它的內(nèi)容(字符)就永遠(yuǎn)不能修改

比如我們寫字符串拼接:

運(yùn)行

String str = "a";
str = str + "b";
str = str + "c";

看似是給str追加了內(nèi)容,實際底層邏輯

  1. 先創(chuàng)建"a"對象 → 拼接"b"時,創(chuàng)建新對象"ab" → 拼接"c"時,再創(chuàng)建新對象"abc"
  2. 原來的"a"、"ab"會變成垃圾數(shù)據(jù),占用內(nèi)存 + 降低效率

?? 痛點總結(jié):如果頻繁拼接、修改字符串(比如循環(huán)拼接、拼接大量內(nèi)容),用String會產(chǎn)生大量無用對象,效率極低、浪費內(nèi)存。

StringBuilder 就是為了解決這個問題而生的,它的核心特點是:字符串可變?nèi)萜?,增刪改查都在「同一個對象」里操作,無額外內(nèi)存浪費,效率極高

二、StringBuilder核心概念

1. 本質(zhì)

StringBuilder 是 Java 提供的一個字符串緩沖區(qū)類,底層是一個可變的字符數(shù)組,專門用于高效拼接、修改字符串內(nèi)容。

  • 所有字符串的修改操作,都是直接在這個字符數(shù)組上完成,不會創(chuàng)建新對象
  • 我們之前手寫的char[]字符數(shù)組,其實就是StringBuilder的底層原理,StringBuilder是 Java 幫我們封裝好的「好用的字符數(shù)組工具類」

2. 核心特點

  1. 可變的:內(nèi)容可以隨時追加、插入、刪除、替換,核心優(yōu)勢!
  2. 效率極高:所有操作都在一個對象內(nèi)完成,無內(nèi)存浪費
  3. 線程不安全:單線程編程(咱們平時寫的main方法、普通業(yè)務(wù)代碼)中使用,速度更快
  4. 無 final 修飾:可以被繼承、重寫方法(實際開發(fā)幾乎不用)

三、StringBuilder基礎(chǔ)用法(必學(xué),固定格式)

第一步:創(chuàng)建StringBuilder對象

兩種常用創(chuàng)建方式,都是無參 / 有參構(gòu)造,任選其一:

// 方式1:無參構(gòu)造(推薦),創(chuàng)建一個空的字符串緩沖區(qū),初始容量默認(rèn)16個字符
StringBuilder sb = new StringBuilder();

// 方式2:有參構(gòu)造,創(chuàng)建時直接放入初始字符串
StringBuilder sb = new StringBuilder("初始內(nèi)容");

第二步:核心操作(拼接 / 修改字符串)

StringBuilder 提供了一系列方法來操作字符串,所有方法調(diào)用后,都是直接修改自身對象,不需要接收返回值,這是和String最大的區(qū)別!

重點必學(xué)的 5 個核心方法(覆蓋 99% 的開發(fā)場景)

所有方法我都給了代碼示例,直接復(fù)制就能運(yùn)行,建議跟著敲一遍!

public class StringBuilderDemo {
    public static void main(String[] args) {
        // 1. 創(chuàng)建對象
        StringBuilder sb = new StringBuilder();
        
        // ========== 方法1:append(任意類型) 追加內(nèi)容【最常用】 ==========
        // 可以追加:字符串、字符、數(shù)字、布爾值、數(shù)組...所有類型都支持
        sb.append("姓名:");
        sb.append("張三");
        sb.append(",年齡:");
        sb.append(20);
        sb.append(",是否有駕照:");
        sb.append(true);
        // 此時sb的內(nèi)容:姓名:張三,年齡:20,是否有駕照:true
        
        // ========== 方法2:toString() 轉(zhuǎn)換為String類型【必須會】 ==========
        // 注意:StringBuilder不是String類型,無法直接賦值給String變量
        // 所有操作完成后,用toString()轉(zhuǎn)為String,才能正常使用字符串
        String result = sb.toString();
        System.out.println(result); // 輸出:姓名:張三,年齡:20,是否有駕照:true

        // ========== 方法3:insert(索引, 內(nèi)容) 插入內(nèi)容 ==========
        // 在指定索引位置插入內(nèi)容,原位置的字符會向后移
        sb.insert(4, "(司機(jī))"); 
        System.out.println(sb); // 輸出:姓名:張三(司機(jī)),年齡:20,是否有駕照:true

        // ========== 方法4:delete(起始索引, 結(jié)束索引) 刪除內(nèi)容 ==========
        // 左閉右開:包含起始索引,不包含結(jié)束索引
        sb.delete(4,8); // 刪除 (司機(jī)) 這幾個字
        System.out.println(sb); // 輸出:姓名:張三,年齡:20,是否有駕照:true

        // ========== 方法5:reverse() 反轉(zhuǎn)字符串 ==========
        sb.reverse();
        System.out.println(sb); // 輸出:eurT:照駕有否是,02:齡年,三張:名姓
    }
}

補(bǔ)充 3 個常用小方法(錦上添花)

StringBuilder sb = new StringBuilder("Java學(xué)習(xí)");
sb.replace(0,4,"Python"); // 替換:索引0-4的內(nèi)容換成Python → 結(jié)果:Python學(xué)習(xí)
sb.length(); // 獲取長度 → 6
sb.charAt(2); // 獲取指定索引的字符 → t

四、StringBuildervsString核心對比(必考 + 必懂)

這是 Java 基礎(chǔ)面試高頻題,也是咱們寫代碼的核心選擇依據(jù),一張表講清所有區(qū)別,建議牢記:

特性String 字符串StringBuilder 字符串緩沖區(qū)
可變性? 不可變(內(nèi)容不能改)? 可變(內(nèi)容隨便改)
內(nèi)存效率? 低,拼接創(chuàng)建新對象? 極高,修改不創(chuàng)建新對象
拼接方式+ 號拼接append() 方法拼接
核心場景字符串內(nèi)容固定不變時使用(比如定義常量、少量拼接)字符串需要頻繁拼接 / 修改時使用(比如循環(huán)拼接、動態(tài)拼接內(nèi)容)
轉(zhuǎn)換關(guān)系StringStringBuildernew StringBuilder(str)StringBuilderStringsb.toString()

經(jīng)典對比案例(你的代碼能用到)

比如拼接 1-100 的數(shù)字,兩種方式的效率天差地別:

// 1. String拼接 → 效率極低,創(chuàng)建大量垃圾對象
String str = "";
for (int i = 1; i <= 100; i++) {
    str += i;
}

// 2. StringBuilder拼接 → 效率極高,僅一個對象
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 100; i++) {
    sb.append(i);
}
String result = sb.toString();

五、StringBuilder實戰(zhàn)案例(貼合你的代碼場景)

結(jié)合你之前寫的【汽車司機(jī)類】【數(shù)值比較類】,給你 2 個你能直接用到作業(yè)里的實戰(zhàn)案例,學(xué)完就會用!

案例 1:拼接司機(jī)信息(替換你之前的 toString 方法)

你之前寫的CarDriver類里,toString 方法是手動拼接字符串,用StringBuilder更高效,推薦這么寫:

// 司機(jī)類的toString方法優(yōu)化(推薦寫法)
@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("汽車司機(jī)信息:");
    sb.append("\n姓名:").append(name);
    sb.append("\n性別:").append(gender);
    sb.append("\n年齡:").append(age);
    sb.append("\n駕駛證號:").append(license);
    sb.append("\n車牌號:").append(number);
    return sb.toString();
}

案例 2:拼接數(shù)組內(nèi)容(你之前寫的數(shù)值比較類里的數(shù)組)

你之前寫了double[] arr = {a,b,c},用StringBuilder可以快速把數(shù)組內(nèi)容拼接成字符串打印,非常實用:

public void compare(double a, double b, double c) {
    double [] arr = {a,b,c};
    // 用StringBuilder拼接數(shù)組內(nèi)容
    StringBuilder sb = new StringBuilder("比較的三個數(shù):");
    for (int i = 0; i < arr.length; i++) {
        sb.append(arr[i]).append(" ");
    }
    System.out.println(sb); // 輸出:比較的三個數(shù):0.1 0.1 0.1 
    
    double temp = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (temp < arr[i]) {
            temp = arr[i];
        }
    }
    System.out.println("最大值為:"+temp);
}

六、拓展補(bǔ)充:StringBuilder和StringBuffer

這兩個類用法完全一樣,99% 的方法都是同名的,唯一區(qū)別:

  1. StringBuilder:線程不安全,效率更高單線程用它(咱們所有作業(yè) / 練習(xí)都用這個)
  2. StringBuffer:線程安全,效率稍低 → 多線程開發(fā)時使用(暫時不用學(xué))

一句話總結(jié):日常寫代碼,無腦用StringBuilder就對了!

七、所有知識點總結(jié)(精華版,必背)

  1. String 不可變,拼接多了效率低;StringBuilder 可變,專門解決字符串頻繁修改 / 拼接的問題。
  2. StringBuilder 底層是可變字符數(shù)組,所有操作都在自身對象完成,無內(nèi)存浪費。
  3. 核心三步:創(chuàng)建對象 → append () 拼接 → toString () 轉(zhuǎn) String
  4. 核心方法:append()(追加)、toString()(轉(zhuǎn)換)、insert()(插入)、delete()(刪除)、reverse()(反轉(zhuǎn))。
  5. 使用場景:只要你需要拼接字符串、修改字符串內(nèi)容,就用StringBuilder;字符串固定不變,就用String。

附贈:你之前報錯的 Math 類代碼 + StringBuilder 優(yōu)化版

把你之前的代碼整合優(yōu)化,加入 StringBuilder,直接復(fù)制可用:

// com.shehuiuniversity.MyMath.java
package com.shehuiuniversity;
public class MyMath {
    public void add(int a, int b) {
        int add = a + b;
        System.out.println(a + " + " + b + " = " + add);
    }
    public void compare(double a, double b,double c) {
        double [] arr = {a,b,c};
        StringBuilder sb = new StringBuilder();
        sb.append("參與比較的數(shù)值:").append(a).append(",").append(b).append(",").append(c);
        System.out.println(sb);
        double temp = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (temp < arr[i]) {
                temp = arr[i];
            }
        }
        System.out.println("最大值為:"+temp);
    }
}

// com.Testclass.MathTest.java
package com.Testclass;
import com.shehuiuniversity.MyMath;
public class MathTest {
    public static void main(String[] args) {
        MyMath ma = new MyMath();
        ma.compare(0.1,0.5,0.3); // 正確調(diào)用,無報錯
        ma.add(10,20);
    }
}

運(yùn)行結(jié)果:

plaintext

參與比較的數(shù)值:0.1,0.5,0.3
最大值為:0.5
10 + 20 = 30

總結(jié) 

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

相關(guān)文章

  • 詳解Mybatis中的CRUD

    詳解Mybatis中的CRUD

    這篇文章主要介紹了Mybatis中的CRUD的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 在idea2023中使用SpringBoot整合Lombok全過程及詳細(xì)用法

    在idea2023中使用SpringBoot整合Lombok全過程及詳細(xì)用法

    Lombok項目是一個java庫,它可以自動插入到編輯器和構(gòu)建工具中,增強(qiáng)java的性能,本文詳細(xì)給大家介紹了在idea2023中使用SpringBoot整合Lombok全過程及詳細(xì)用法,需要的朋友可以參考下
    2023-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計算器的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計算器的實現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中棧與綜合計算器的實現(xiàn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解一下
    2022-10-10
  • java中注解的實現(xiàn)原理詳解

    java中注解的實現(xiàn)原理詳解

    這篇文章主要介紹了java中注解的實現(xiàn)原理詳解,注解也叫元數(shù)據(jù),例如我們常見的@Override和@Deprecated,注解是JDK1.5版本開始引入的一個特性,用于對代碼進(jìn)行說明,可以對包、類、接口、字段、方法參數(shù)、局部變量等進(jìn)行注解,需要的朋友可以參考下
    2023-10-10
  • Java實現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法

    Java實現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法

    這篇文章主要介紹了Java實現(xiàn)Word/Excel/TXT轉(zhuǎn)PDF的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Java多線程ForkJoinPool實例詳解

    Java多線程ForkJoinPool實例詳解

    這篇文章主要介紹了Java多線程ForkJoinPool實例詳解,涉及forkjoin框架的相關(guān)內(nèi)容,需要的朋友可以參考下。
    2017-09-09
  • Spring自定義注解配置簡單日志示例

    Spring自定義注解配置簡單日志示例

    這篇文章主要介紹了Spring自定義注解配置簡單日志示例,注解可以增強(qiáng)我們的java代碼,同時利用反射技術(shù)可以擴(kuò)充實現(xiàn)很多功能,它們被廣泛應(yīng)用于三大框架底層,需要的朋友可以參考下
    2023-05-05
  • java中synchronized關(guān)鍵字的3種寫法實例

    java中synchronized關(guān)鍵字的3種寫法實例

    synchronized是Java中的關(guān)鍵字,是一種同步鎖,下面這篇文章主要給大家介紹了關(guān)于java中synchronized關(guān)鍵字的3種寫法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • IDEA git版本回滾使用解讀

    IDEA git版本回滾使用解讀

    這篇文章主要介紹了Git的分區(qū)和回滾操作,包括工作區(qū)、暫存區(qū)和版本庫的概念,以及如何在不同狀態(tài)下進(jìn)行回滾操作,如未commit、commit未push、已commit但未push以及已commit并push的情況
    2025-10-10
  • spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑

    spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑

    這篇文章主要介紹了spring cloud升級到spring boot 2.x/Finchley.RELEASE遇到的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論

南川市| 景洪市| 竹山县| 芦溪县| 辽阳县| 大足县| 澎湖县| 察哈| 红原县| 栖霞市| 文昌市| 枞阳县| 北票市| 长寿区| 唐海县| 浦江县| 巴里| 桂林市| 平谷区| 大连市| 锦屏县| 济阳县| 汤原县| 灌云县| 塔城市| 若羌县| 宁德市| 彭阳县| 全南县| 石林| 资阳市| 连州市| 加查县| 阳春市| 苗栗县| 平舆县| 怀远县| 齐河县| 高邮市| 湟中县| 常宁市|