常用类的一个比较
常用类
String、StringBuffer 和 StringBuilder 的比较
- StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法
也一样 - String: 不可变字符序列,效率低,但是复用率高。
- StringBuffer: 可变字符序列、效率较高(增删)、线程安全,看源码
- StringBuilder: 可变字符序列、效率最高、线程不安全
- String使用注意说明:
string s= "a"; //创建了-一个字符串
s += "b"; //实际上原来的" a"字符串对象已经丢弃了,现在又产生了一个字符
串s+ "b" (也就是"ab")。 如果多次执行这些改变串内容的操作,会导致大量副
本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大
影响程序的性能=>结论:如果我们对String做大量修改,不要使用String
之后对结论进行测试
public class StringCompare {
public static void main(String[] args) {
long startTime = 0L;
long endTime = 0L;
StringBuffer buffer = new StringBuffer("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {//StringBuffer 拼接 50000 次
buffer.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuffer 的执行时间:" + (endTime - startTime));
StringBuilder builder = new StringBuilder("");
startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {//StringBuilder 拼接 50000 次
builder.append(String.valueOf(i));
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder 的执行时间:" + (endTime - startTime));
String text = "";
startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {//String 拼接 50000
text = text + i;
}
endTime = System.currentTimeMillis();
System.out.println("String 的执行时间:" + (endTime -startTime));
}
测试结果如下
我们可以看到StringBuilder运行速度大于StringBuffer大于String
结论
- 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
- 如果字符串存在大量的修改操作,并在单线程的情况,使用StringBuilder
- 如果字符串存在大量的修改操作,并在多线程的情况,使用StringBuffer
- 如果我们字符串很少修改,被多个对象引用,使用String, 比如配置信息等

浙公网安备 33010602011771号