StringBuffer类

一、 结构剖析

StringBuffer类

  1. Java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。

  2. 很多方法与String相同,但StringBuffer是可变长度的。

  3. StringBuffer是一个容器。

  4. String VS StringBuffer

    1. String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。private final char value[];
    2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高。char[] value; //这个存放在堆里
//StringBuffer类的细节:
public class StringBuffer01 {
    public static void main(String[] args) {
        //1. StringBuffer 的直接父类 是 AbstractStringBuilder
        //2. StringBuffer 实现了 Serializable,即StringBuffer的对象可串行化
        //3. 在父类 AbstractStringBuilder 中有属性 char value[] ,不是final
        //   该 value数组 存放我们的字符串内容,是存放在堆中的而非常量池,value[]不是常量了
        //4. StringBuffer 是一个final类,不能被继承
        //5. 因为StringBuffer 字符内容是存在 char[] value ,所以在变化时(增加/删除)
        // 不用每次都更换地址(即不是每次都创建新对象),所以效率高于 String(每次变化都会指向新的对象)
        StringBuffer stringBuffer = new StringBuffer();
    }
}

二、 StringBuffer转换

三、 StringBuffer的常见方法

  1. append()
  2. delete(start,end)
  3. replace(start,end,string),将start~end之间的内容替换掉,不含end。
  4. indexOf(),查找子串在字符串第一次出现的索引,如果找不到返回 -1.
  5. insert()
  6. 获取长度 length()
public class StringBufferMethod {
    public static void main(String[] args) {
        StringBuffer s = new StringBuffer("hello");
        //增
        s.append(',');// "hello,"
        s.append("张三丰");// "hello,张三丰"
        s.append("赵敏").append(100).append(true).append(10.5);// "hello,张三丰100true10.5"
        System.out.println(s);
        //删
        /*
           删除索引 >= start && < end 处的字符
           解读:删除 11 ~ 14 的字符 [11,14)
         */
        s.delete(11,14);
        System.out.println(s);//hello,张三丰赵敏true10.5
        //改
        //使用 周芷诺 替换 索引 9 - 11 的字符 [9,11)
        s.replace(9,11,"周芷若");
        System.out.println(s);//hello,张三丰周芷若true10.5
        //查找指定的子串在字符串中第一次出现的索引,如果找不到返回-1
        int indexOf = s.indexOf("张三丰");
        System.out.println(indexOf);//6
        //插
        //在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
        s.insert(9,"赵敏");
        System.out.println(s);//hello,张三丰赵敏周芷若true10.5
        //长度
        System.out.println(s.length());
        System.out.println(s);
    }
}