1.主要区别:
String 是不可变的字符串,线程安全的
StringBuffer 是可变的字符串,线程安全的
StringBuilder是可变的字符串,线程不安全的。
在大部分情况下,字符串拼接速度为:StringBuilder>StringBuffer>String
2.实现代码:
public class Test1 {
public static void main(String[] args) {
String string="String";
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append(string+"Buffer");
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append(string+"Builder");
System.out.println("String:"+string);
System.out.println("StringBuffer:"+stringBuffer);
System.out.println("StringBuilder:"+stringBuilder);
}
}
3.选择场景:
1.如果要操作少量的数据用 String
2.单线程操作字符串缓冲区 下操作大量数据 StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 StringBuffer
要提高字符串拼接速度:因为字符串拼接速度为:StringBuilder>StringBuffer>String
因为String是不可变的,因此每次对其操作改变其变量值时,都是重新生成一个新的对象,只是把变量引用指向了新对象而已,所以速度是比较慢。
对StringBuffer操作其实是直接操作对象指向的引用,不用产生新的对象,速度很快,是线程安全的,但在多线程时,如果要维护多线程的同步的话,那么速度也会变慢。
StringBuilder是jdk5之后新增的,其用法与StringBuffer是一样的,但它是线程不安全的,所以在单线程中,它的速度是最快的。