异同点
String:不可变的字符序列;底层用char[]进行存储 ;
StringBuffer:可变的字符序列;线程安全的,效率低;多线程操作一般都是用这个;底层用char[]进行存储
StringBuilder:可变的字符序列;jdk5.0新增的;线程不安全的,效率高;底层用char[]进行存储 ;
分析
//char[] value = new char[0];
String str = new String;
// char[] value = new char[]{'a','b','c'};
String str1 = new String("abc");
// char[] value = new char[16]; 底层创建了一个16长度的char数组
StringBuffer sb1 = new StringBuffer();
sb1.append('a'); // value[0] = 'a';
sb1.append('b'); // value[1] = 'b';
//char[] value = new char["abc".length() + 16]
StringBuffer sb2 = new StringBuffer("abc");
扩容问题
如果添加的数据底层数组盛不下了,那就需要扩容底层数组。默认情况下,扩容为原来容量的2倍+2,同时将原有数组元素复制到新数组中。
常用方法总结
增 StringBuffer append(XXX) 用于进行字符串的拼接
删 StringBuffer delete(int start,int end) 删除指定位置的内容
改 void setCharAt(int n,char ch) 指定位置放入字符 ; StirgBuffer replace(int start,int end,String str) 把[start,end)位置替换为str
查 char charAt(int n) 返回指定位置的字符
插 StringBuffer insert(int offset, XXX) 在指定位置插入XXX
长度 length()
逆转 StringBuffer reverse() 把当前字符串序列逆转
效率
StringBuild > StringBuffer >> String