我们知道,String对象是不可变的,而Java中String类提供了“+”进行字符串拼接操作,从JDK1.5开始,字符串的拼接操作是通过StringBuffer类来完成的。
String a = "str";
String b = "ing";
String c = a + b;
上述代码的实际实现过程是:
String c = new StringBuffer(a).append(b).toString();
也就是说,在这个过程中实际创建了一个StringBuffer对象和一个String对象。因此,当对字符串进行修改的时候,使用 StringBuffer 和 StringBuilder 类,系统开销比较小。
与 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
区别
- String 不可变,而 StringBuffer 和 StringBuilder 是可变的。
- StringBuffer 是线程安全的,内部使用 synchronized进行同步,而 StringBuilder 不是线程安全的。
根据这些主要区别:
- 进行字符串拼接操作时,使用StingBuffer 和 StringBuilder 可以节省系统开销。
- 在要求线程安全的情况下,应该使用 StringBuffer。