【StringBuffer】
构造方法:
StringBuffer();
构造一个不带字符串的缓冲区,初始化容量为16个字符.当超过16个字符时他会复制一个新的字符数组,然后把原来的字符串赋值过去(Stringbuffer内部用字符数组实现)。
StringBuffer(int capacity);
构造一个不带字符串,但具有指定容量的字符串缓冲区。初始化一个刚刚好的,就不用做多余复制数组的动作
StringBuffer(String s);
构造一个不带字符串的缓冲区,并将其内容初始化为指定的字符串内容
具备的功能
1.添加
stringBuffer append(data);
stringBuffer insert(index,data);
用法:
StringBuffer sb=new StringBuffer();
sb.append("1").append("3");
sb.insert(1,"2");
输出 sb:123
注意: StringBuffer sb=new StringBuffer();
StringBuffer s1=sb.append("1");
sb==s1;这是因为StringBuffer.append();返回的是自身
2.删除
stringBuffer delete(start,end);包含start,不包含end
stringBuffer deleteCharAt(int index);删除指定位置
用法:
StringBuffer sb=new StringBuffer("abcd");
删除:
sb.delete(1,3);
输出 sb:ad
清空: sb.delete(0,sb.length());
3.查找
char charAt(index);
int indexOf(string)
int lastIndexOf(string)
4.修改
stringBuffer repalce(start,end,string)
void setCharAt(index,char);
优点:线程安全
缺点:效率慢
【StringBuilder】
jdk1.5以后出现了和StringBuffer一模一样的对象,就是StringBuilder
它的用法和StringBuffer一样。
优点:效率快
缺点:线程不安全
一般来说我们实际开发中都是用StringBuilder
为什么会出现线程安全问题呢?
在StringBuffer中添加和删除的方法都加了同步,所以它是线程安全的,但是每次添加或者删除都要判断锁
所以它效率低
而StringBuilder则相反