简单概述
- StringBuffer:线程安全的,如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer。
- Java.lang.StringBuffer是线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。
- StringBuffer类的直接父类是AbstractStringBuilder。
- 实现了Serializable,即StringBuffer的对象可以串行化。
- AbstractStringBuilder父类中 属性 char[] value 不是final 类型。
- 该value数组存放字符串内容,存放在堆中。
构造方法

String和StringBuffer区别

- String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别是当内存中无引用对象多了以后,JVM 的 GC 就会开始工作,性能就会降低。
- 使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象的引用。所以大多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。
- StringBuffer保存字符串的时候,不用每次都更新地址,如果地址的空间大小够的话,新增的数据就直接放在后面,地址空间不改边。只有空间不够的时候,才会重新扩容,然后改变新的地址
使用原则
- 如果要操作少量的数据,用String
- 单线程操作大量数据,用StringBuilder
- 多线程操作大量数据,用StringBuffer
- 不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类
String和StringBuffer的相互转化
class StringAndStringBuffer { public static void main(String[] args) { //String 转 StringBuffer String str="hello java"; //方式1:使用构造器 StringBuffer stringBuffer = new StringBuffer(str); //方式2:使用StringBuffer的append方法 StringBuffer stringBuffer1 = new StringBuffer(); stringBuffer1=stringBuffer1.append(str); //StringBuffer转String StringBuffer stringBuffer2 = new StringBuffer("hello lxw"); //方式1:使用StringBuffer的toString()方法 String s = stringBuffer2.toString(); //方式2:使用构造器来完成 String s1 = new String(stringBuffer2); }}