Stringbuffer/StringBuilder: 可变的字符串, 对字符串的操作,都在原来的空间进行操作

 String转StringBuffer

StringBuffer buffer = new StringBuffer(string);

StringBuffer转String

String string = buffer.toString();

1 .为什么使用StringBuffer类

字符串的不变性:

  1. 一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符到String对象中。
  2. 您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String对象。
  3. 如果程序对这种附加字符串的需求很频繁,系统会频繁在内存中创建String对象,造成性能下降。所以并不建议使用+来进行频繁的字符串串联。应该使用java.lang.StringBuffer类。

2.StringBuffer的使用

创建StringBuffer对象

java string的key转换成驼峰 java string转stringbuffer_指定位置

如果StringBuffer存放的内容大于16个字节, 推荐大家使用指定内容的构造方法, 设置的容量大于等于存放的内容的大小

如果没有指定容量, StringBuffer进行自动扩容, 扩容过程进行拷贝,这个很牺牲性能.

3.StringBuffer和StringBuilder

StringBuilder与StringBuffer的用法完全一致,唯一的区别是StringBuffer是线程安全的,而StringBuilder不是线程安全的。所以StringBuilder的性能要比StringBuffer要好。

单线程推荐使用StringBuilder,多线程使用StringBuffer。

4.StringBuffer常用方法

  1. 往字符串末尾追加: append() 与String的+操作一样
    StringBuffer append(任意数据类型) 返回的Stringbuffer就是原理的StringBuffer, 都在原来的空间进行操作,
    StringBuffer 的方法返回原理的Stringbuffer对象, 目的: 实现方法的连写
  2. 往字符串指定位置插入内容
    StringBuffer insert(int 下标,任意类型的内容 )
  3. 修改指定位置上的字符
    void setCharAt(int 下标, 修改字符)
  4. 删除指定范围的字符
    StringBuffer delete(int 开始下标,int 结束下标)
    注意: 包括开始位置, 不包括结束位置
  5. 删除指定位置上一个字符
    StringBuffer deleteCharAt(int 下标)
  6. 字符串反写
    StringBuffer reverse()
  7. 替换指定范围的内容

   StringBuffer replace(int start, int end, String str)

     8.把StringBuffer 变成String

         String toString()

如果一个String字符串,进行大量的修改操作(插入,追加,修改,删除), 为了提高性能, 先把String转换为Stringbuffer,通过StringBuffer进行修改操作, 最后把StringBuffer变成String(实际项目中,前端传递内容都是String,而不是StringBuffer)