Java基础快速入门:StringBuilder详解

Java字符串处理终极指南:从基础到高级,全面解析String、StringBuffer与StringBuilder Java中的String是一个不可变对象,这意味着一旦创建了String对象,其值就不能被更改。任何对String的操作都会导致新String对象的生成。这种设计有利于提高安全性和简化内存管理。在Java中,和是用于处理可变字符串的类。它们允许修改字符串内容而不需要创建新的对象。这在需要频繁修改字符串时非常有用,可以显著提高性能。:线程安全的,适合多线程环境。:非线程安全,但在单线程环境下比更高效。 阅读详情

本文纲要

  1. StringBuilder 概述
  2. StringBuilder 构造方法
  3. StringBuilder 常用成员方法
    append 添加数据
    reverse 反转内容
    length 获取长度
    toString 转为 String
    链式编程
  4. StringBuilder 提高效率的原理
  5. String 与 StringBuilder 的相互转换
  6. 案例:判断对称字符串
  7. 案例:拼接字符串

StringBuilder 概述

StringBuilder 是一个可变的字符串类,可以把它看作一个容器。这个容器可以存放任意数据类型(整数、小数、字符、字符串等),但数据进入容器后都会变成字符串

与不可变的 String 类不同,StringBuilder 的内容可以修改,无需每次拼接都创建新对象

核心作用:提高字符串的操作效率

下面通过一段代码对比 String 和 StringBuilder 进行大量字符串拼接时的耗时情况

public class Demo1StringBuilder {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        // 使用StringBuilder进行50000次拼接 
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i <= 50000; i++) {
            sb.append(i);
        }
        System.out.println(sb);
        long end = System.currentTimeMillis();
        System.out.println("StringBuilder 耗时:" + (end - start) + " 毫秒");
    }
 
    public static void method() {
        long start = System.currentTimeMillis();
        String s = "";
        for (int i = 1; i <= 50000; i++) {
            s += i; // 每次拼接都会创建新的String对象 
        }
        System.out.println(s);
        long end = System.currentTimeMillis();
        System.out.println("String 耗时:" + (end - start) + " 毫秒");
    }
}

运行结果示例:

String 拼接 50000 次耗时约 2900 毫秒  
StringBuilder 拼接 50000 次耗时约 260 毫秒  

由此可见,StringBuilder 在高频拼接场景下效率远超 String

StringBuilder 构造方法

StringBuilder 位于 java.lang 包下,无需导包。常用的构造方法有两个:

  • public StringBuilder():创建空白可变字符串对象
  • public StringBuilder(String str):根据给出的字符串创建可变字符串对象
public class Demo2StringBuilder {
    public static void main(String[] args) {
        // 空参构造:创建空容器 
        StringBuilder sb1 = new StringBuilder();
        System.out.println(sb1); // 输出空白 
 
        // 带参构造:容器初始化时包含指定内容 
        StringBuilder sb2 = new StringBuilder("abc");
        System.out.println(sb2); // 输出 abc 
    }
}

注意:与 String 类似,直接打印 StringBuilder 对象会输出其内容,而不是内存地址

StringBuilder 常用成员方法

1 ) append:添加数据

append 方法可以接收任意类型参数,将其追加到当前可变字符串末尾,并返回对象本身。

public class Demo3StringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("红色");
        System.out.println(sb); // 红色 
        sb.append("蓝色");
        System.out.println(sb); // 红色蓝色 
        sb.append("绿色");
        System.out.println(sb); // 红色蓝色绿色 
    }
}

2 ) 链式编程

因为 append 返回的是对象本身,所以可以连续调用:

StringBuilder sb = new StringBuilder();
sb.append("红色").append("蓝色").append("绿色");
System.out.println(sb); // 红色蓝色绿色 

这种调用方式称为链式编程,能简化代码。

3 ) reverse:反转内容

将 StringBuilder 内的字符序列整体反转,也返回对象本身

sb.append("红色").append("蓝色").append("绿色");
System.out.println("反转前:" + sb);
sb.reverse();
System.out.println("反转后:" + sb); // 色绿 色蓝 色红 

4 ) length:获取长度

返回当前容器内字符的个数。

System.out.println("sb中字符个数:" + sb.length()); // 6 

5 ) toString:转换为 String

将 StringBuilder 对象转换为普通的 String 对象,内容不变,类型改变。

String s = sb.toString();
System.out.println(s);

StringBuilder 提高效率的原理

1 ) String 拼接的内存开销

每次使用 + 进行字符串拼接,底层都会自动执行以下步骤:

  1. 创建一个新的 StringBuilder 对象
  2. 调用 append 完成拼接
  3. 调用 toString 转换为 String 对象

这意味着每遇到一个加号,堆内存中就会产生两个新对象(一个 StringBuilder,一个 String)。多次拼接会产生大量临时对象,占用内存并增加 GC 压力。

String拼接

底层: new StringBuilder, append, toString

底层: 再次 new StringBuilder, append, toString

String s1 = "a";

s2 = s1 + "b";

创建对象: StringBuilder+String

s3 = s2 + "c";

又创建两个新对象

2 ) StringBuilder 的内存优势

使用 StringBuilder 拼接时,所有操作都在同一个对象内部完成,不会不断创建新对象。即使进行十万次拼接,堆中也只有一个 StringBuilder 实例,极大提高了效率。

StringBuilder拼接

StringBuilder sb = new StringBuilder()

sb.append('a')

sb.append('b')

sb.append('c')

同一个StringBuilder对象

3 ) String 与 StringBuilder 的区别总结

特性StringStringBuilder
内容可变性不可变可变
拼接效率低(频繁创建新对象)高(始终操作同一对象)
适用场景内容改动少、常量字符串频繁拼接、修改的动态字符串

String 与 StringBuilder 的相互转换

  • 在实际开发中,经常需要将 String 转为 StringBuilder 来使用其便捷方法,反之亦然。
  • String → StringBuilder:使用 StringBuilder 的有参构造方法
    • StringBuilder sb = new StringBuilder(str);
  • StringBuilder → String:调用 toString() 方法
    • String s = sb.toString();

案例:判断对称字符串

需求:键盘录入一个字符串,判断是否对称(例如 12321 对称,123123 不对称)
思路:将字符串转为 StringBuilder,调 reverse 反转,再转回 String 与原串对比

import java.util.Scanner;
 
public class Test8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入对称字符串:");
        String s = sc.nextLine();
 
        // String 转为 StringBuilder,调用 reverse 反转 
        StringBuilder sb = new StringBuilder(s);
        sb.reverse();
        // StringBuilder 转回 String 
        String reverseStr = sb.toString();
 
        // 比较原串与反转串 
        if (s.equals(reverseStr)) {
            System.out.println("是对称字符串");
        } else {
            System.out.println("不是对称字符串");
        }
    }
}

注意:比较时必须用 equals 比较两个 String,不能用 StringBuilder 直接与 String 比较,否则类型不一致无法得到正确结果。

案例:拼接数组为字符串

需求:定义一个方法,将 int 数组按格式 [1, 2, 3] 拼接为字符串并返回
思路:利用 StringBuilder 的 append 灵活拼接,最后转换为 String 返回

public class Test9 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String result = arrayToString(arr);
        System.out.println(result); // 输出 [1, 2, 3]
    }
 
    public static String arrayToString(int[] arr) {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]).append("]");
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        return sb.toString();
    }
}

要点:遍历时判断是否为最后一个元素,以拼接正确的分隔符和右中括号
链式调用 append 使代码更简洁

总结

StringBuilder 是可变字符串类,适合频繁修改字符串的场景
构造方法支持空参和传入初始字符串

append、reverse、length、toString 为核心方法,支持链式编程
其高效根源在于只维护一个对象,避免反复创建临时对象

与 String 的相互转换通过有参构造和 toString() 完成
在实际开发中,遇到频繁拼接、反转等需求,优先考虑 StringBuilder

掌握 StringBuilder 能够帮助我们写出更高效、更简洁的 Java 代码,是 Java 基础中不可或缺的重要一环。

ARM架构UOS实战:从源码编译Qt 5.15.2到定制Qt Creator的全流程解析 本文详细解析了在ARM架构统信UOS系统上,从源码编译Qt 5.15.2到定制Qt Creator开发环境的完整流程。内容涵盖环境准备、依赖部署、源码配置、编译优化、错误处理及IDE集成,旨在帮助开发者在国产化平台上构建自主可控的高性能Qt开发环境,解决特定ARM平台的兼容性与性能优化问题。 阅读详情

相关推荐

粒子群算法实战:用Matlab解决旅行商问题(TSP)的完整代码解析

本文提供了使用粒子群算法解决旅行商问题的完整Matlab实战指南。通过将连续空间的粒子群算法进行离散化改造,采用基于交换序的策略来更新粒子位置与速度,并给出了从问题定义、数据结构设计、核心函数实现到主迭代循环的详细代码解析。文章还探讨了参数调优、性能优化及处理复杂TSP变体的进阶思路,为物流规划、路径优化等领域的工程应用提供了可直接复用的解决方案。

m2n3o4p5的博客 350

Java快速入门(20) - StringBuffer和StringBuilder类

关注公众号「小白轻松学编程」获取更多教程!

240

Prompt Learning 简介

• Prompt Learning 可以将所有的任务归一化预训练语言模型的任务• 避免了预训练和fine-tuning 之间的gap,几乎所有 NLP 任务都可以直接使用,不需要训练数据。• 在少样本的数据集上,能取得超过fine-tuning的效果。• 使得所有的任务在方法上变得一致。

jxsdq的博客 1万+

视频教程-JavaSE基础视频精讲⑫:String,StringBuilder和StringBuffer-Java

JavaSE基础视频精讲⑫:String,StringBuilder和StringBuffer ...

weixin_32712827的博客 134

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 358

海康VisionMaster图形定位实战:十字形Mark点精准匹配技巧

本文深入解析了海康VisionMaster图形定位模块在工业自动化中实现十字形Mark点精准匹配的实战技巧。文章从ROI设置、核心参数调优(如定位方式、尺度模式、对比度阈值)到工业场景应用与避坑指南,系统性地分享了提升匹配成功率和稳定性的关键步骤,帮助工程师应对复杂现场环境,实现高效、可靠的视觉定位。

weixin_29285605的博客 261

小白零基础快速入门Java —— 第七课:常用API

小白零基础快速入门Java ——第七课:常用API。本文介绍了以下内容:1、API和包。 2、String。 3、ArrayList。4、Object类。5、Objects。6、包装类。7、StringBuilder、StringBuffer。8、StringJoiner。9、Math、System、Runtime。10、BigDcimal 。11、JDK8之前传统的日期、时间。12、JSK8开始新增的日期、时间。13、Arrays。

Huacyu的博客 186

Transformer-Based Attention Networks for Continuous Pixel-Wise Prediction 基于Transformer注意力网络连续像素级与估计

Transformer-Based Attention Networks for Continuous Pixel-Wise Prediction 基于Transformer注意力网络的连续的像素级的

MengYa_Dream的博客 4717

Java学习分享系列(一)

Java学习分享系列(一) 博主只是一个小白,借着这个平台来分享和总结自己的一周的收获,如果下面的内容有纰漏或者错误欢迎友好的批评指正。 工欲善其事,必先利其器 ————————————eclipse快捷键 alt + / 自动补全 ctrl +o:快速outline视图 ctrl + shift + r:打开资源列表 ctrl + shift + f:格式化代码 ctrl + e:快速转换编辑器 ctrl + page down 或 ctrl + page up: 选项卡之间快速切换

C_S_H_的博客 810

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 575

2026年佰维存储数字IC笔试试卷带答案

建立时间是有效时钟沿到来前,输入数据必须稳定保持的最短时间。保持时间是有效时钟沿到来后,输入数据必须继续稳定保持的最短时间。

Open 104

java程序基本结构(一)

目录一、数据类型1、整型2、浮点型3、char类型4、boolean类型 二、运算符1、算术运算符2、数学函数 3、自增与自减运算符4、关系运算符5、位运算符三、字符串1、子串2、拼接3、检查字符串是否相等4、String API5、StringBuilder类......

weixin_50616848的博客 458

华为 MetaERP 集成盘古大模型、天筹 AI 求解器等生成式 AI 相关技术能力,结合华为云数智融合平台的支撑,在供应链预测中围绕需求预测、物料匹配

华为 MetaERP 集成盘古大模型、天筹 AI 求解器等生成式 AI 相关技术能力,结合华为云数智融合平台的支撑,在供应链预测中围绕需求预测、物料匹配、风险预警等核心场景开展实践,大幅提升了供应链预测的精准度与效率,以下是具体实践内容及成效: 动态需求预测,降低库存偏差华为供应链涉及数万种采购物料,物料清单层级高,且市场需求波动大。MetaERP 集成华为云 ModelArts 等工具构建专属动态需求预测模型,融合深度学习算法,纳入市场趋势、历史销售、产能数据等多维度信息进行综合预测。在华为自身供应链应

金牌架构师 701

【无标题】

JAVA学习

dinuo888的博客 124

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java基础(八)| 常用API与StringBuilder详解

什么是API​ API (Application Programming Interface) :应用程序编程接口java中的API​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。

timerring的博客 5339

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java基础(四) StringBuffer、StringBuilder原理浅析

本文StringBuffer与StringBuilder的创建,append方法的原理讲解,对比了String、StringBuffer与StringBuilder异同

梁初夏的专栏 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java StringBuilder 和 StringBuffer 万字详解(深度讲解)

java 《API-常用类》专题——常用类 StringBuffer类和StringBuilder类 详解。

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 7864

java replace stringbuilder_9 个可以快速 Java 性能调优技巧

点击“开发者技术前线”,选择“星标?”让一部分开发者看到未来来自:Thorben Janssen |责编:乐乐链接:t.cn/AiFxzzSP大多数开发者认为性能优化是一个复杂的话题,它需要大量的工作经验和相关知识理论。好吧,这也不完全错。优化一个应用做到性能最优化可能不是件容易的任务,但是这并不意味着你没有相关的知识就什么也做不了。这里有一些易于遵循的建议和最佳实践可以帮助你创建一个...

weixin_39982568的博客 138

JAVA String类和StringBuilder类 详解

1.API 1.1 API概述-帮助文档的使用 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。 如何使用API帮助文档 : 打开帮助文档 找到索引选项卡中的输入框 在输入框中输入Random 看类在哪个包下 看类

JAVA开发者@邢先生 265

Java 的 String、StringBuffer 和 StringBuilder(一文讲透)

你知道 Java 中的 String、StringBuffer 和 StringBuilder 的发展历史吗?你知道它们的区别吗?你知道它们的适用场景吗?想知道就赶紧进来看看吧!

小康2022的博客 1942

Java快速入门(19) - String类详解

关注公众号「小白轻松学编程」获取更多学习资源!

2596

Java中的String,StringBuilder,StringBuffer三者的区别

Java中的String,StringBuilder,StringBuffer三者的区别

这个人很懒,什么都没有留下。 4818

java stringbuilder原理_Java基础 StringBuffer、StringBuilder原理浅析

StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢?首先看下面的例子public static void main(String[] args) {String str0 = "hel,lo,wor,l,d";long start = System.currentTimeMillis();f...

weixin_35483528的博客 200

【Java】快速入门String类

根据博主本人知识以及参考书籍《Java核心技术 卷一》,我对Java编程基础中的字符串String类以及一些基本操作进行了整理,希望能够帮到正在学习或复习Java语法的你。

2401_88030885的博客 690

stringbuilder append长字符串后不对_Java基础(四) StringBuffer、StringBuilder原理浅析

StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢?关于String的讲解请看Java基础(三) String深度解析首先看下面的例子上述代码中3处循环完成了同样的功能,字符串拼接,执行的结果如下:可以看出执行时间差别太大,为了解决String不擅长的大量字符串拼接这种业务场景,引入了Str...

weixin_39970668的博客 577

java基础详解

java基础知识

weixin_56680764的博客 3536
上一篇: Java基础快速入门: 字符串String
下一篇: Java基础快速入门:从数组到集合,掌握ArrayList
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值