1、StringBuilder是什么
StringBuilder是非线程安全的可变字符串类。
java.lang.StringBuilder这个可变的字符序列类是5.0新增的。继承于AbstractStringBuilder(大部分方法都在该类实现),并不是线程安全的,当多个线程同时修改一个对象时很可能会冲突。
了解String是什么看这里:String是什么
部分AbstractStringBuilder、StringBuilder源码:
abstract class AbstractStringBuilder implements Appendable, CharSequence {
public AbstractStringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
public AbstractStringBuilder append(String str) {
if (str == null ) str = "null" ;
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars( 0 , len, value, count);
count += len;
return this ;
}
}
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence
{
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
public StringBuilder append(String str) {
super . append(str);
return this ;
}
}
2、StringBuffer是什么
StringBuffer是线程安全的可变字符串类
java.lang.StringBuffer继承于AbstractStringBuilder(同StringBuilder一样也继承于该类,并且部分方法都在该类实现),重写了其大部分方法,逻辑没变只是将其改为synchronized线程同步。
部分StringBuffer源码:
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence
{
public synchronized StringBuffer append(Object obj) {
super . append(String.valueOf(obj));
return this ;
}
public synchronized StringBuffer append(String str) {
super . append(str);
return this ;
}
}
3、StringBuffer/StringBuilder有什么区别
由上面概念可以看到,StringBuffer是线程安全的,而StringBuilder并不是,StringBuilder在多线程中可能会发生冲突。
所以,当要保证线程安全的时候就需要用StringBuffer,然而在多线程时,StringBuffer比StringBuilder性能要差(synchronized相当于线程堵塞)。
时间: 2024-10-09 20:18:39