这三个类的主要区别在运行速度和线程安全两个方面:
运行速度:StringBuilder > StringBuffer > String
String --> 字符串常量(不可变类,类实例变量一旦创建,其成员变量就不能改变。)
StringBuffer --> 字符串变量(可变类,类实例变量创建后,其成员变量就可以改变。)
StringBuilder --> 字符串变量(可变类,类实例变量创建后,其成员变量就可以改变。)
线程安全:String与StringBuffer 线程安全,StringBuilder 线程不安全
String为不可变类,显然是线程安全的。
StringBuffer类对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder类对方法没有加同步锁,所以不是线程安全的。
总结:在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。 一般而言,如果操作的数据量较小,应优先使用String;如果是在单线程下操作大量数据,应优先使用StringBuilder;如果在多线程下操作大量数据,应优先使用StringBuffer。