一
1.1String、StringgBuffer、StringBuilder的异同
String | StringBuffer | StringBuilder |
---|---|---|
不可变的字符序列 | 可变字符序列 ,线程安全 ,效率低 | 可变的字符序列 ,线程不安全 ,效率高 |
底层使用char型数组存储 | 底层使用char型数组存储 | 底层使用char型数组存储 |
StringBuilder只是操作(拼接,修改)字符串的手段,早操作完成后还是用toStirng方法还原成字符串
1.1.1源码分析
String:
String str = new String();
:char[] value = new char[0]
String str = new String("abc")
:char[] value = new char[]{‘a’,‘b’,‘c’}
StringBuffer、StringBuilder:
StringBuffer sb1 = new StringBuffer();
:cahr[] value = new char[16];*底层创建了一个长度时16的char型数组
sb1.append('a');
:value[0] = ‘a’;
StringBuffer sb = new StringBuffer("abc");
:char[] value = new char[“abc”.length+16]
1.1.2扩容问题
如果要添加的数据底层数组存不下了,那就需要扩容底层的数组。默认情况下,扩容为原来的容量的2倍+2,同时将原有数组中的元素复制到新的数组中
1.2 StringBuffer、StringBuilder中的常用方法
- 增 StringBuffer
append
(xxx):字符串连接,返回StringBuffer
- 删 StringBuffer
delete
(int start,int end):删除指定位置内容 - 改 StringBuffer
replace
(int start, int end ,String str):把[start,end)位置替换为str - StringBuffer
insert
(int offset,xxx):在指定位置插入xxx - 反转StringBuffer
reverse
:把当前字符序列逆转 - 查
indexOf(String str)
、length
、charAt(int n)
、setCharAt(int n,char ch)
- 遍历:
for + charAt()/toString
- public StringBuilder
append
(anyType) :拼接数据并返回StringBuilder对象本身 - public int
length()
:返回对象内容长度 - public String
toString()
:通过toString实现把StringBuilder转换为String。