StringBuffer

SOBER大约 2 分钟

StringBuffer

一、基本介绍

  • java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删
  • 很多方法与 String 相同,但 StringBuffer 是可变长度的
  • StringBuffer 是一个容器。

二、解读

  1. StringBuffer 的直接父类是 AbstractStringBuilder
  2. StringBuffer 实现了 Serializable,即 StringBuffer 的对象可以串行化
  3. 在父类中 AbstractstringBuilder 有属性 char[] value,不是 final,该 value 数组存放 字符串内容,因此存放在堆中的
  4. StringBuffer 是一个 final 类,不能被继承
  5. 因为 StringBuffer 字符内容是存在 char[]value,所有在变化(增加/删除),不用每次都更换地址(即创建新对象)

三、String 对比 StringBuffer

  1. String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 //private final char value[];
  2. StringBuffer 保存的是字符串变量,里面的值可以更改,每次 StringBuffer 的更新实际上可以更新内容,不用更新地址,效率较高//char[] value; // 这个放在堆.

四、StringBuffer 的构造器

  1. StringBuffer()

    构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符

    StringBuffer stringBuffer = new StringBuffer();
    StringBuffer stringBuffer1 = new StringBuffer(100);
    
  2. StringBuffer(CharSequence seq)

    public java.lang.StringBuilder(charSequence seg)构造一个字符串缓冲区,它包含与指定的 Charsequence 相同的字符。

  3. StringBuffer(int capacity)

    capacity[容量]

    构造一个不带字符,但具有指定初始容量的字符串缓冲区。即对 char[]大小进行指定

  4. StringBuffer(String str)

    构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容

    StringBuffer stringBuffer2 = new StringBuffer("hello");
    

五、String 和 StringBuffer 相互转换

在开发中,我们经常需要将 String 和 StringBuffer 进行转换,

  • String 转 StringBuffer
    String s ="hello";
    
    // 1. 使用构造器, 返回的才是 StringBuffer 对象,对 str 本身没有影响
    StringBuffer b1 = new StringBuffer(s);
    
    // 2. 吏用的是 append 方法
    StringBuffer b2 = new StringBuffer();
    b2.append(s);
    
  • StringBuffer 转 String
    String s ="hello";
    StringBuffer b1 = new StringBuffer(s);
    
    // 1. 使用 StringBuffer 提供的 toString 方法
    String s2 = b1.tostring(); //b1 [StringBuffer]
    
    // 2. 使用构造器
    String s3 = new String(b1);
    

六、StringBuffer 常见方法

  • append:添加
    StringBuffer stringBuffer2 = new StringBuffer("hello");
    
    stringBuffer2.append(',');
    stringBuffer2.append("张三").append(",").append("刘桑");
    stringBuffer2.append(',').append(1000).append(true).append(10.5555);
    stringBuffer2.append("赵明");
    System.out.println(stringBuffer2);
    
  • delete:删除
    StringBuffer stringBuffer2 = new StringBuffer("hello");
    
    stringBuffer2.append(',');
    stringBuffer2.append("张三").append(",").append("刘桑");
    stringBuffer2.append(',').append(1000).append(true).append(10.5555);
    stringBuffer2.append("赵明");
    System.out.println(stringBuffer2); // hello,张三,刘桑,1000true10.5555赵明
    stringBuffer2.delete(1, 3);
    System.out.println(stringBuffer2); // hlo,张三,刘桑,1000true10.5555赵明
    
  • 插入
    StringBuffer stringBuffer2 = new StringBuffer("hello");
    
    stringBuffer2.append(',');
    stringBuffer2.append("张三").append(",").append("刘桑");
    stringBuffer2.append(',').append(1000).append(true).append(10.5555);
    stringBuffer2.append("赵明");
    System.out.println(stringBuffer2); // hello,张三,刘桑,1000true10.5555赵明
    stringBuffer2.delete(1, 3);
    System.out.println(stringBuffer2); // hlo,张三,刘桑,1000true10.5555赵明
    // 在索引为 9 的位置插入,原来索引为9的内容自动后移
    stringBuffer2.insert(9, "XXXXXXX");
    System.out.println(stringBuffer2);