跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

String、StringBuilder、StringBuffer 的区别

String、StringBuilder、StringBuffer 是 Java 中处理字符串的核心类。String 不可变,修改产生新对象;StringBuffer 线程安全但效率略低;StringBuilder 非线程安全且效率最高。编译期常量拼接会被优化。构造时指定容量可提升性能。除非确认无多线程风险且追求极致性能,否则推荐使用 StringBuffer。

steve发布于 2016/5/4更新于 2026/10/2682 浏览
String、StringBuilder、StringBuffer 的区别

1. String、StringBuilder 与 StringBuffer 概述

String:字符串常量,长度不可变,因此不能被继承。

StringBuffer:字符串变量,线程安全(Synchronized)。适用于频繁修改字符串内容的场景。调用 toString() 可转换为 String 类型。主要操作包括 append 和 insert 方法,支持重载以接受任意类型数据。append 将字符追加至缓冲区末端,insert 在指定位置插入字符。

StringBuilder:字符串变量,非线程安全。内部实现为可变字符序列,JDK 5.0 新增。提供与 StringBuffer 兼容的 API,但不保证同步。设计用于单线程使用的字符串缓冲区场景。

2. 主要性能区别

执行速度比较:StringBuilder > StringBuffer > String。

StringBuffer 的 append 效率高于 String 的 "+" 连接操作。String 是不可变对象,每次修改都会生成新对象并改变引用,频繁修改会导致系统性能下降及 JVM GC 压力增加。StringBuffer 则直接操作对象本身。

在某些情况下,Java 编译器会将 String 对象的拼接优化为 StringBuffer 操作,此时两者速度差异不大。例如:

String s1 = "This is only a" + " simple" + " test";
StringBuilder sb = new StringBuilder("This is only a").append(" simple").append(" test");

上述生成 String s1 对象的速度并不比 StringBuilder 慢。实际上 Java 编译器会自动进行如下转换:

String s1 = "This is only a simple test";

3. 使用建议

  1. StringBuilder 通常用于方法内部完成类似 "+" 的功能,因线程不安全,用完后可丢弃。
  2. StringBuffer 主要用于全局变量。
  3. 为提高性能,构造 StringBuffer 或 StringBuilder 时应尽可能指定容量。若操作字符串长度不超过 16 个字符可不指定,默认容量为 16。不指定容量会显著降低性能。
  4. 相同情况下,StringBuilder 相比 StringBuffer 仅能获得 10%~15% 的性能提升,但需承担多线程不安全风险。在模块化编程中,除非确定模块不会运行在多线程模式下且系统瓶颈确实在 StringBuffer 上,否则建议使用 StringBuffer。

目录

  1. 1. String、StringBuilder 与 StringBuffer 概述
  2. 2. 主要性能区别
  3. 3. 使用建议

更多推荐文章

查看全部
  • CISP 注册信息安全专业人员认证指南与职业价值解析
  • C++ vector 容器使用、迭代器失效与模拟实现
  • Opencode 开发中的 4 个核心 Skills 组合与流程控制
  • AI 鸿蒙 App 开发:从页面到能力系统的架构变革
  • 律师如何利用大语言模型辅助法律工作
  • 文心4.5开源测评:国产大模型技术突破与多维能力解析
  • Flutter eip55 库在鸿蒙系统的适配与以太坊地址校验实战
  • Java 异常处理机制与全局异常捕获实战
  • Git 提交信息规范
  • IntelliJ IDEA 下载、安装与配置详解
  • 高鋒集團與 Web3Labs 如何賦能傳統企業 Web3 轉型
  • 轻小说机翻机器人:基于 Kotlin 与 Vue3 的开源翻译方案
  • 生产环境中使用 git revert 的 5 个真实案例
  • 本地项目代码上传至 Gitee 完整教程
  • Python 通过 ctypes 调用 C++ DLL 的原理与实战
  • 零基础入门 Go 语言
  • 医疗 AI 场景下的模型融合与集成策略
  • AI Agent 核心概念解析、与 RPA 差异及扣子平台实战指南
  • C++ 基础知识入门:命名空间、引用与函数重载
  • 机器学习常见名词与核心概念汇总

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online