String类
字符串是常量,他们的值被创建之后,不能被改变。
字符串的底层是一个被final修饰的数组,不能改变,是一个常量
private final char value[];
StringBuilder类
字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
底层是是一个没有被final修饰的数组。可以改变长度。线程不安全
//底层
value = new char[capacity];
//没有加同步
public StringBuilder append(char[] str) {
super.append(str);
return this;
}
StringBuffer类
和StringBuilder一样,就是方法添加了同步锁,所以线程安全
//加了同步
synchronized StringBuffer append(AbstractStringBuilder asb) {
toStringCache = null;
super.append(asb);
return this;
}
常用方法
StringBuilder s2=new StringBuilder();
//在末尾添加任意字符
s2.append("abc");
s2.append(99);
s2.append('韩');
//在指定位置添加字符
s2.insert(0,"d");
//删除指定位置
s2.delete(0,1);
总结:
少量不改变使用String
单线程使用StringBuilder,因为他的速度快。
多线程使用StringBuffer,因为他是同步的,安全。