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

String、StringBuilder、StringBuffer 的区别

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

steve发布于 2016/5/4更新于 2026/7/2133 浏览
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. 使用建议
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Arduino BLDC 使用 6.5 寸轮毂电机的智能动态跟随机器人底盘
  • AI Skills:前端新的效率神器
  • 从零搭建你的第一个 AI Agent
  • 学习大语言模型原理必看的 10 篇论文
  • JavaScript 运算符与流程控制详解
  • OpenClaw(龙虾)如何掀起AI智能体革命
  • 2026 年医疗 AI 可信革命全栈实现(上)
  • YT-DLP Web Player 开源在线视频播放器部署指南
  • VSCode Copilot 网络无法连接的解决方法
  • Visual Studio 2022 无法使用 GitHub Copilot 的排查与解决
  • Vivado 许可证文件获取与配置指南
  • 结合大模型与爬虫的数据提取实践
  • C++与Linux基础:文件篇(5)文件管理系统与缓冲区实现
  • Windows 10/11 部署 OpenClaw:环境搭建与机器人互联
  • Axum Rust Web 框架核心使用指南
  • 微服务链路追踪实战:SkyWalking 与 Zipkin 架构解析及性能优化
  • 网络安全:PHP 代码审计中的 SQL 注入 WAF 绕过技巧
  • Python 解析 HTML 实战:从基础方法到高级技巧
  • Python 快速生成 requirements.txt 文件的 5 种实用命令
  • Copilot 人工智能助手功能与版本介绍

相关免费在线工具

  • 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