String Stringbuffer和StringBuilder的区别
string他是一个常量final,每次操作,自身是不变的,都会产生新的对象。
final都是线程安全的。
StringBuffer修改的是自身,他是一个变量
StringBuilder和StringBuffer同样的api但是不再同步,所以StringBuilder比StringBuffer更快
很多同步并不是程序员自己加入的,同步代码的范围超过了大部分人的想象
public String contectString(String a, String b) {
return a + b;
}
public String contectString2(String a, String b) {
StringBuffer sb = new StringBuffer();
sb.append(a);
sb.append(b);
return sb.toString();
}
public String contectString3(String a, String b) {
StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
return sb.toString();
}
StringBuffer是线程安全的,StringBuilder是不安全的,
看源代码
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
在jdk1.5以前contectString会转化成2来完成,每个stringbuffer.append()都有一个同步块,锁就是sb对象
1.5以后会自动优化为3方法
public StringBuilder append(String str) {
super.append(str);
return this;
}
这去掉了同步方法,这是不安全的,但是大部分代码是单线程的,所以使用他比较推荐