掌握 StringBuilder 的可变性与高性能特性
熟练使用核心方法(append、insert、replace、reverse 等)进行字符串操作
能在 String、StringBuffer 与 StringBuilder 之间做出合理选择
理解容量管理机制对性能的影响
StringBuilder 是 java.lang 包中提供的一个可变字符序列类。它允许在不创建新对象的前提下直接修改内容,从而显著提升频繁字符串操作的性能。
关键特点:
可变:内容可原地修改
非线程安全:无同步开销
高性能:单线程环境下优于
StringBuffer
public class CoderHub {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Java");
System.out.println("初始: " + sb);
sb.append(" is awesome!");
System.out.println("追加后: " + sb);
}
}输出:
初始: Java
追加后: Java is awesome!💡
append()直接修改原对象,避免了String拼接时产生的大量中间对象。
// 1. 默认构造
StringBuilder sb1 = new StringBuilder();
sb1.append("Hello");
// 2. 指定容量(优化性能)
StringBuilder sb2 = new StringBuilder(50);
sb2.append("This has initial capacity 50");
// 3. 从字符串初始化
StringBuilder sb3 = new StringBuilder("Hello");
sb3.append("World");
// 4. 从 CharSequence 初始化
CharSequence cs = "Java";
StringBuilder sb4 = new StringBuilder(cs);
sb4.append("Programming");
System.out.println(sb1); // Hello
System.out.println(sb2); // This has initial capacity 50
System.out.println(sb3); // HelloWorld
System.out.println(sb4); // JavaProgramming默认容量:16
扩容策略:当空间不足时,新容量 = (旧容量 × 2) + 2
手动控制:
ensureCapacity(int min):确保容量 ≥ min
trimToSize():将容量缩减至当前长度(节省内存)
✅ 性能建议:若预知操作后的最大长度,初始化时指定足够容量可避免多次内存拷贝。
选择原则:
// 单线程 → StringBuilder StringBuilder sb = new StringBuilder(); // 多线程 → StringBuffer StringBuffer sb = new StringBuffer(); // 内容不变 → String String s = "Constant";
StringBuilder 是单线程下字符串操作的首选
所有修改方法(append、insert 等)返回自身引用,支持链式调用
默认容量 16,超限时自动扩容(公式:old*2+2)
非线程安全,多线程环境需额外同步或改用 StringBuffer
最终通过 toString() 转为标准 String 对象供外部使用
💡 最佳实践:在循环中拼接字符串时,务必使用
StringBuilder,避免String的指数级性能下降。
为什么 StringBuilder 的 append() 方法返回 this?这种设计带来了什么编程便利?
编写一个方法,使用 StringBuilder 实现“去除字符串中所有空格”的功能,并分析其时间复杂度。
如果在多线程环境中错误地使用了 StringBuilder,可能出现什么问题?如何通过代码复现并验证?