StringBuilder 的性能优势主要体现在减少字符串拼接时的对象创建和内存拷贝开销,尤其是在频繁修改字符串内容的场景下。
下面从原理和对比角度说明:
在 Java 中,String 是不可变对象:
String s = "a";
s += "b";
实际发生的是:
String 对象"b" 拷贝进新对象如果在循环中:
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
StringBuilder 内部维护一个 可扩容的 char 数组:
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");
| 方式 | 对象创建次数 |
|---|---|
String + |
O(n) |
StringBuilder |
1(或极少) |
String:每次拼接都全量拷贝StringBuilder:只在 append 时追加假设拼接 n 次:
| 方式 | 时间复杂度 |
|---|---|
String + |
O(n²) |
StringBuilder |
O(n) |
// String
long start = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 100000; i++) {
s += i;
}
System.out.println(System.currentTimeMillis() - start);
// StringBuilder
start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++) {
sb.append(i);
}
System.out.println(System.currentTimeMillis() - start);
通常:
String:几百毫秒甚至更久StringBuilder:几毫秒| 类 | 线程安全 | 性能 |
|---|---|---|
StringBuilder |
❌ 不安全 | ✅ 更高 |
StringBuffer |
✅ 安全 | ❌ 较低 |
单线程场景优先用
StringBuilder
✅ 适合用 StringBuilder:
❌ 不适合:
+ 更清晰)如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。