可变字符串(StringBuilder和StringBuffer)

可变字符串(StringBuilder和StringBuffer)

为什么要使用可变字符串

String类是保存字符串常量的。每次修改都需要重新开辟空间,效率低

StringBuffer的特点

  1. StringBuffer 的直接父类 是 AbstractStringBuilder (是一个古老的可变字符串类)r
  2. StringBuffer 实现了 Serializable, 即 StringBuffer 的对象可以串行化 (用于网络传输)
  3. 在父类中 AbstractStringBuilder 有属性 char[] value,不是 final(可变)
    该 value 数组存放 字符串内容,存放在堆中的
  4. StringBuffer 是一个 final 类,不能被继承
  5. 因为 StringBuffer 字符内容是存在 char[] value, 所有在变化(增加/删除)
    不用每次都更换地址(即不是每次创建新对象), 所以效率高于 String
    只有在value数组长度不够时才会创建一个新的数组

StringBuffer使用

传入String
StringBuffer name = new StringBuffer("ll");
name.append("dwb");
传出String
String str = new String(name);
str = name.toString();
方法名 描述 传值 语法
append 增加 基本数据类型(包括String) append(i值)
delete 删除 int delete(开始索引,结束索引)
replace 替换指定位置的值 String replace(开始索引,结束索引,值);
indexOf 查找指定的子串在字符串第一次出现的索引,如果找不到返回-1 String indexOf(值)
insert 在索引为 9 的位置插入 "赵敏",原来索引为 9 的内容自动后移 String insert(索引,值)
length 返回StringBuffer的长度 length()

查看StringBuffer的源码

file
file
通过看源码 发现我们调用无参的构造器的时候 底层默认创建了大小为16的byte数组