首先,StringBuffer是一个容器,用来存放字符,在StringBuffer创建的过程中,首先会在堆内存中指向一个value空间,这个value空间将会指向一个字符数组即 char[]。所以在修改StringBuffer的实例化对象时并不需要重新指向(在StringBuffer的允许长度内),这相对String来说大大提高了效率。(!!StringBuffer虽然没StringBuilder效率高但是在多线程是安全的(StringBuilder没有做互斥的处理),所以在单线程里选择使用StringBuilder,多线程使用StringBuffer)
说一下String转成StringBuffer的途径:
第一个是使用StringBuffer的构造器:
String str = "hello world";
StringBuffer stringBuffer = new StringBuffer(str);
第二种是使用StringBuffer的append方法:
StringBuffer append = stringBuffer.append(str);
下面是StringBuffer转化为String的方法:
第一种是使用StringBuffer的toString方法:
String s = stringBuffer.toString();
第二种是使用String的构造器:
String s1 = new String(stringBuffer);
在文章的最后,总结一下String,StringBuffer和StringBuilder三者的区别:
String:不可变字符序列,效率低,复用性高(一旦创建就会出现在常量池中,不会被更改)。
StringBuffer:可变字符序列,效率较高(增删),线程安全。
StringBuilder:可变字符序列,效率最高,线程不安全。