String、StringBuffer、StringBuilder区别
String | StringBuffer | StringBuilder |
---|---|---|
不可变字符序列 | 可变字符序列 | 可变字符序列 |
since1.0 | since1.0 | since1.5 |
- | 线程安全 | 线程不安全 |
每次操作新生成一个对象 | 进行操作时,不新增对象,只是扩容 | 进行操作时,不新增对象,只是扩容 |
使用场景:小数据量 | 大数据量,多线程 | 大数据量,多线程 |
String():初始化为"" String(String original):初始化为original | StringBuffer():初始16字节长度字符串 StringBuffer(String str):初始str.length()+16长度字符串 | StringBuilder():初始16字节长度字符串 StringBuilder(String str):初始str.length()+16长度字符串 |
String类中的value通过final关键字修饰,因此不可变。
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/* The value is used for character storage.*/
char[] value;
/*The count is the number of characters used.*/
int count;
}
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
/* The value is used for character storage. */
private final char value[];
}
StringBuffer中部分函数通过synchronized关键字修饰,因为为线程安全的。StringBuilder中则没有。因此在不考虑线程安全的情况下StringBuilder的效率更高。
public synchronized StringBuffer insert(int index, char[] str, int offset,int len)
public synchronized StringBuffer insert(int offset, Object obj);
public synchronized StringBuffer insert(int offset, String str);
……