Java 面试进阶中的 StringBuilder 怎么在循环拼接时防止性能退化

酷宇姑娘_1595

酷宇姑娘_1595

2026-09-05

326人浏览

原创

防止 stringbuilder 性能退化需避开四大反模式:容量失控(预估并指定初始容量,避免默认16导致频繁扩容复制)、实例滥用(循环外创建、复用,用 setlength(0) 清空)、调用错位(循环后统一 tostring,禁循环内调用)、类型误用(链式 append 优于字符串拼接表达式,数字优先用原生 append 方法)。

java 面试进阶中的 stringbuilder 怎么在循环拼接时防止性能退化

防止 StringBuilder 在循环拼接中性能退化,核心不是“用了没”,而是避开几个高频反模式:容量失控、实例滥用、调用错位和类型误用。真正拖慢的从来不是 append 方法本身,而是背后隐含的对象分配与数组复制。

预估容量,避免反复扩容

默认初始容量 16,一旦超出就会扩容(新容量 ≈ 旧容量 × 2 + 2),每次扩容都要复制整个底层数组——这是隐藏开销主力。

  • 能估算就直接指定:比如拼接 500 个平均长度 40 的字符串加逗号分隔,总长 ≈ 500×40 + 499 ≈ 20500,写 new StringBuilder(20500)
  • 不确定但数据量大,宁可高估 10%–20%,也别依赖默认值;完全无法预估时,至少设为 new StringBuilder(4096)
  • 别指望 ensureCapacity() 补救——它只扩不缩,还多一次方法调用

复用实例,禁止循环内新建

在循环体里每次 new StringBuilder(),等于把优化全抵消了:对象创建、初始化、GC 压力一样不少。

Java Maven Code Review
Java Maven Code Review

审查Java Maven项目(ZIP压缩包或GitLab仓库URL),检查代码规范、命名、模块边界、可维护性问题以及重复代码。

下载
  • 正确做法:在循环外创建一次,循环内只调 append()
  • 多次独立拼接(如批量生成日志或 SQL):用 sb.setLength(0) 清空内容,保留底层数组,比 new 快得多
  • 多线程场景:绝不能共享同一个实例;改用 ThreadLocal 每线程一个,或每个线程独立创建

只 append,不提前 toString

toString() 是复制整个 char 数组生成新 String 的操作,时间复杂度 O(n)。在循环里每轮都调,等于白用 StringBuilder。

  • ✅ 正确:循环结束后统一调一次 sb.toString()
  • ❌ 错误:循环内写 result = sb.append(s).toString(),每次都在造新 String
  • 拼接过程中需要中间结果?优先考虑逻辑拆分,而不是靠 toString 截断

链式 append,避开隐式字符串构造

看似等价的写法,底层行为天差地别。关键在于是否引入额外的临时对象。

  • ✅ 推荐:sb.append("id:").append(id).append(", name:").append(name) —— 链式调用,无临时字符串
  • ❌ 避免:sb.append("id:" + id + ", name:" + name) —— 编译器先用另一个 StringBuilder 拼出临时串,再 append,多一次构造+toString
  • 数字拼接优先用 append(int)、append(long),比 append(String.valueOf(n)) 少一次对象创建

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

java

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

9677

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

6842

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6052

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1064

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

868

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1276

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2529

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

19871

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1135

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习