Java教程-StringBuffer 和 StringBuilder 的区别

Java提供了三个类用于表示字符序列:String、StringBuffer和StringBuilder。String类是不可变的,而StringBuffer和StringBuilder类是可变的。StringBuffer和StringBuilder之间有许多区别。StringBuilder类是从JDK 1.5开始引入的。
下面列出了 StringBuffer 和 StringBuilder 之间的差异:
No. | StringBuffer | StringBuilder |
---|---|---|
1) | StringBuffer 是同步的,即线程安全的。这意味着两个线程不能同时调用 StringBuffer 的方法。 | StringBuilder是非同步的,即不是线程安全的。这意味着两个线程可以同时调用 StringBuilder 的方法。 |
2) | StringBuffer 的效率不如 StringBuilder。 | StringBuilder比 StringBuffer更高效。 |
3) | StringBuffer 是在 Java 1.0 中引入的 | StringBuilder 是在 Java 1.5 中引入的 |
字符串缓冲区示例
BufferTest.java
//Java程序演示StringBuffer类的使用。
public class BufferTest{
public static void main(String[] args){
StringBuffer buffer=new StringBuffer("hello");
buffer.append("java");
System.out.println(buffer);
}
}
输出:
hellojava
字符串生成器示例
BuilderTest.java
//Java程序演示StringBuilder类的使用。
public class BuilderTest{
public static void main(String[] args){
StringBuilder builder=new StringBuilder("hello");
builder.append("java");
System.out.println(builder);
}
}
输出:
hellojava
StringBuffer和StringBuilder的性能测试
让我们看看检查 StringBuffer 和 StringBuilder 类性能的代码。
ConcatTest.java
//用于演示StringBuffer 和StringBuilder 类性能的Java 程序。
public class ConcatTest{
public static void main(String[] args){
long startTime = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("Java");
for (int i=0; i<10000; i++){
sb.append("Tpoint");
}
System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
StringBuilder sb2 = new StringBuilder("Java");
for (int i=0; i<10000; i++){
sb2.append("Tpoint");
}
System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms");
}
}
输出:
Time taken by StringBuffer: 16ms
Time taken by StringBuilder: 0ms