Stringbuffer/StringBuilder: 可变的字符串, 对字符串的操作,都在原来的空间进行操作
String转StringBuffer
StringBuffer buffer = new StringBuffer(string);
StringBuffer转String
String string = buffer.toString();
1 .为什么使用StringBuffer类
字符串的不变性:
- 一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符到String对象中。
- 您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String对象。
- 如果程序对这种附加字符串的需求很频繁,系统会频繁在内存中创建String对象,造成性能下降。所以并不建议使用+来进行频繁的字符串串联。应该使用java.lang.StringBuffer类。
2.StringBuffer的使用
创建StringBuffer对象
如果StringBuffer存放的内容大于16个字节, 推荐大家使用指定内容的构造方法, 设置的容量大于等于存放的内容的大小
如果没有指定容量, StringBuffer进行自动扩容, 扩容过程进行拷贝,这个很牺牲性能.
3.StringBuffer和StringBuilder
StringBuilder与StringBuffer的用法完全一致,唯一的区别是StringBuffer是线程安全的,而StringBuilder不是线程安全的。所以StringBuilder的性能要比StringBuffer要好。
单线程推荐使用StringBuilder,多线程使用StringBuffer。
4.StringBuffer常用方法
- 往字符串末尾追加: append() 与String的+操作一样
StringBuffer append(任意数据类型) 返回的Stringbuffer就是原理的StringBuffer, 都在原来的空间进行操作,
StringBuffer 的方法返回原理的Stringbuffer对象, 目的: 实现方法的连写 - 往字符串指定位置插入内容
StringBuffer insert(int 下标,任意类型的内容 ) - 修改指定位置上的字符
void setCharAt(int 下标, 修改字符) - 删除指定范围的字符
StringBuffer delete(int 开始下标,int 结束下标)
注意: 包括开始位置, 不包括结束位置 - 删除指定位置上一个字符
StringBuffer deleteCharAt(int 下标) - 字符串反写
StringBuffer reverse() - 替换指定范围的内容
StringBuffer
replace(int start, int end, String str)
8.把StringBuffer 变成String
String toString()