在 Java 中,StringBuilder
是一个非常常用且高效的类,用于操作可变字符串(mutable string)。与 String
类不同的是,String
是不可变的(immutable),每次对字符串进行拼接、修改等操作时都会创建一个新的对象,而 StringBuilder
则可以在原有对象上进行修改,从而提高性能。
new StringBuilder()
?StringBuilder sb = new StringBuilder();
这行代码创建了一个空的 StringBuilder
实例,你可以使用它来构建或修改字符串内容,而不会频繁地创建新的字符串对象。
当你需要在一个循环中拼接大量字符串时,推荐使用 StringBuilder
而不是 +
或 +=
操作符:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i);
}
String result = sb.toString(); // 转换为 String
⚠️ 如果用
String
来做同样的事,会产生 100 个中间字符串对象,效率很低。
StringBuilder sb = new StringBuilder("hello");
System.out.println(sb.reverse()); // 输出: olleh
StringBuilder sb = new StringBuilder("hello");
sb.insert(2, "XYZ"); // 在索引 2 插入 "XYZ" → "heXYZllo"
sb.delete(2, 5); // 删除索引 [2,5) 的字符 → "helLO"
StringBuilder sb = new StringBuilder("hello world");
sb.replace(6, 11, "Java"); // 替换 "world" → "hello Java"
StringBuilder sb = new StringBuilder("abcdefg");
sb.setLength(3); // 截断为前三个字符 → "abc"
sb.setCharAt(1, 'X'); // 修改字符 → "aXc"
new StringBuilder()
创建默认初始容量为 16 的空字符串构建器。
new StringBuilder(int capacity)
创建指定初始容量的空字符串构建器。
new StringBuilder(String str)
创建以 str
初始化的字符串构建器。
示例:
StringBuilder sb1 = new StringBuilder(); // 初始容量 16
StringBuilder sb2 = new StringBuilder(32); // 初始容量 32
StringBuilder sb3 = new StringBuilder("hello"); // 初始内容是 "hello"
StringBuffer
的区别特性 | StringBuilder |
StringBuffer |
---|---|---|
线程安全 | ❌ 不是线程安全的 | ✅ 是线程安全的 |
性能 | 更快 | 相对较慢 |
使用场景 | 单线程下操作字符串 | 多线程共享访问字符串 |
所以:单线程推荐使用
StringBuilder
,多线程推荐使用StringBuffer
。
public boolean isPalindrome(String str) {
return str.equals(new StringBuilder(str).reverse().toString());
}
功能 | 是否支持 |
---|---|
可变字符串操作 | ✅ |
高效字符串拼接 | ✅ |
字符插入/删除/替换 | ✅ |
字符串反转 | ✅ |
多线程安全 | ❌ |
可指定初始容量 | ✅ |