1. 基本介绍
(1)StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
(2)很多方法与String相同,但StringBuffer是可变长度的(存放字符的数组不是final修饰的,内容可以变化)。
(3)StringBuffer是一个容器。
2. StringBuffer类 继承体系图
(1)StringBuffer 的直接父类 是 AbstractStringBuilder类
(2)StringBuffer 实现了 Serializable,即StringBuffer的对象可以串行化
(3)在父类AbstractStringBuilder中,有属性char[] value,不是final修饰,在该value数组中存放 字符串内容,因此是 存放在堆中的(不在常量池)。
(4)StringBuffer是一个final类,不能被继承。
3. String类 和 StringBuffer类 对比
(1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。(源代码:private final char value[]; )
(2)StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址(只有当前空间不够的时候才更新地址),效率较高。(源代码char[] value; 这个是放在堆中)
4. StringBuffer的构造器
(1)StringBuffer()
创建一个大小为16的char[],用于存放字符内容。
(2)StringBuffer(int capacity) //capacity容量
通过构造器指定char[]的大小。
(3)StringBuffer(String str)
通过传入一个String字符串 创建 StringBuffer,此时char[]大小就是str.length() + 16。
5. String 和 StringBuffer 相互转换
(1)String —> StringBuffer
①使用构造器
②使用append方法
(2)StringBuffer —> String
①使用toString方法
②使用构造器
6. StringBuffer类 常用方法
①增 append
②删delete(start,end) 将start--end 间的内容删除,不含end
③改replace(start,end,string) 将start--end 间的内容替换掉,不含end
④查indexOf 查找子串在字符串第1次出现的索引,如果找不到返回-1
⑤插insert
⑥获取长度 length