一、区别
String:不可变的字符序列
StringBuffer:可变的字符序列、线程安全、效率低
StringBuilder:可变的字符序列、线程不安全、效率高 JDK5.0新增
二、源码分析
String str = new String(); //相当于 char[] value = new char[0]
String str = new String("abc"); //相当于 char[] value = new char[]{'a','b','c'}
StringBuffer sb = new StringBuffer(); //相当于底层创建了一个长度为16的字符数组 char[] value = new char[16]
sb.append('a'); //相当于 value[0] = 'a';
sb.append('b'); //相当于 value[1] = 'b';
StringBuffer sb = new StringBuffer("abc") //相当于 char[] value = new char["abc".length + 16];
扩容问题:如果要添加的数据底层数组放不下了,就要扩容底层的数组
默认情况下,扩容为原来数组长度的2倍加2,并且将原来数组的内容复制到新数组
三、常用方法
•添加功能
StringBuffer append(String str)
StringBuffer insert(int offset,String str)
•删除功能
StringBuffer deleteCharAt(int index)
StringBuffer delete(int start,int end)
•替换功能
StringBuffer replace(int start,int end,String str)
•反转功能
StringBuffer reverse()
•截取功能(返回新字符串,本身并没有改变)
String substring(int start)
String substring(int start,int end)