一、引进StringBuilder的原因
字符串类String是final限定类型,String str=“abc”+“bcs”;这句代码看似简单,但是代码运行时,实际上创建了3个字符串对象,分别是:“abs”,“bcs”,和“abcbcs”,如果这样的拼接数量不断增加,会是程序系统产生极大的性能消耗,因此要避免使用这样的方式修改字符串的内容。通常来讲,String的操作比较简单,但是由于String的不可修改特性,为了方便字符串的修改,提供StringBuild和StringBuffer类。
二、StringBuilder和StringBuffer区别:
String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的情况考虑使用StingBuffer。
先来看一下StringBuilder的使用:
public class Test{
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append("World");
fun(sb);
System.out.println(sb);
}
public static void fun(StringBuffer temp) {
temp.append("\n").append("www.bit.com.cn");
}
}
StringBuffer的每个方法多了一个Synchronized关键字,所以它是线程安全的,StringBuilder是线程不安全的。
多线程可以理解为:每一个跑道就是一个线程,多个选手再跑道上比赛就属于多线程场景。StringBuffer添加的Synchronized关键字,就相当于给跑道设置边界,不会出现比赛的选手跑到其他选手跑道而造成混乱的情况。
三、总结:String,StringBuilder和StringBuffer的区别:
1.String的内容不可修改,StringBuilder和StringBuffer的内容不可修改;
2.StringBuilder和StringBuffer的大部分功能是相似的;
3.StringBuffer采用同步机制,属于线程安全操作,而StringBuilder未采用同步机制,是线程不安全的。