1. 可变性机制
String
使用 final 字符数组存储数据
p
r
i
v
a
t
e
f
i
n
a
l
c
h
a
r
v
a
l
u
e
[
]
;
private\ final\ char\ value[];
private final char value[];StringBuffer
/StringBuilder
使用普通字符数组
c
h
a
r
[
]
v
a
l
u
e
;
char[]\ value;
char[] value;
每次修改时前者创建新对象,后者直接修改原数组
2. 线程安全对比
类名 | 同步机制 | 适用场景 |
---|
String | 天然线程安全 | 常量字符串操作 |
StringBuffer | 方法添加 synchronized 关键字 | 多线程环境 |
StringBuilder | 无同步机制 | 单线程环境 |
3. 性能差异分析
long start = System.currentTimeMillis();
String result = "";
for(int i=0; i<100000; i++) {
result += i;
}
System.out.println("String耗时:"+(System.currentTimeMillis()-start));
- 典型测试结果:
String
拼接10万次:约 8500msStringBuffer
:约 25msStringBuilder
:约 15ms
4. 最佳实践建议
- 优先使用
StringBuilder
(单线程环境) - 多线程共享变量时使用
StringBuffer
- 少量字符串操作可直接用
String
- 初始化时预估容量(避免频繁扩容):
StringBuilder sb = new StringBuilder(1024);