当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
通过代码我们测试三种字符串的效率:
public class Test {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuilder stb = new StringBuilder();
String s = new String();
long start = 0l;
long end = 0l;
start = System.currentTimeMillis();
for (int i=0;i<11111;i++) {
sb.append(i);
}
end = System.currentTimeMillis();
System.out.println("StringBuffer耗时"+(end-start)+"毫秒");
start = System.currentTimeMillis();
for (int i=0;i<11111;i++) {
stb.append(i);
}
end = System.currentTimeMillis();
System.out.println("StringBuilder耗时"+(end-start)+"毫秒");
start = System.currentTimeMillis();
for (int i=0;i<11111;i++) {
s+=i;
}
end = System.currentTimeMillis();
System.out.println("String耗时"+(end-start)+"毫秒");
}
}
测试结果如下:
从中我们可以知道,StringBuilder是效率最高的,StringBuffer次之,至于String,在处理过大的字符串时,慢的难以想象。