java中用于字符串处理的常用类有三个: String,StringBuffer和StringBuilder,那么三者有什么异同呢?
1.相同点:
都是final类,不允许被继承。这主要是从安全性上考虑防止继承后某些参数被修改。
2.不同点:
线程安全:
StringBuffer是线程安全的,而StringBuilder是线程不安全的,因为 StringBuffer的方法都是被synchronized修饰的,而StringBuilder的方法没有synchronized修饰关键字。
StringBuffer代码段:
@Override
public synchronized int length() {
return count;
}
@Override
public synchronized int capacity() {
return value.length;
}
StringBuilder代码段:
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
性能:
执行速度:StringBuilder > StringBuffer > String
String为字符串常量,所以String类的操作会涉及到大量的对象拷贝。StringBuilder和StringBuffer均为字符串变量因此可以规避这个问题。
StringBuilder 没有对方法加锁,所以StringBuilder的性能要好于StringBuffer。
3.应用场景:
1.String适用于少量的字符串操作的场景。
2.StringBuilder适用于单线程下大量字符串操作的场景。
3.StringBuffer适用多线程下大量字符串操作的场景。