Java--StringBuffer和StringBuilder

1. StringBuffer

说明: StringBuffer 代表可变的字符序列,可以对字符串内容进行增删。

  1. StringBuffer是可变长度
  2. StringBuffer原码解读:
    • StringBuffer的直接父类是 AbstractStringBuilder
    • StringBuffer 实现了 Serializable,即StringBuffer 的对象可以串行化
    • 在父类中 AbstractStringBuffer 有属性 char[] value, 不是final
    • 该value数组存放字符串内容,引出存放在堆中的数据
    • StringBuffer是一个 final类,不能被继承
    • 因为StrngBuffer字符内容是存在char[] value,所以在变化时,不用每次都更换地址(即创建新的对象),效率高于String。
  3. String 和 StringBuffer
  • String 保存的是字符串常量,里面的值不能修改,每次String类的更新实际上是更改地址,效率较低。

    private final char value[]

  • StringBuffer 保存的是字符串变量,里面的值可以修改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率更高。 char[] value

  1. StringBuffer构造器

     StringBuffer stringbuffer = new StringBuffer(); //创建一个长度为16的 char[] 数组,用于存放字符内容
     
     StringBuffer s = new StringBuffer(100); //创建一个长度为100 的char[]数组
     
    StringBuffer s1 = new StringBuffer("hello"); //构造一个字符串缓冲区,并将其内容初始化为指定字符串内容 hello+16个
    
    
  2. String 和 StringBuffer 相互转换

    • String转 StringBuffer:

      //1.使用构造器
      String str="hello";
      StringBuffer stringbuffer=new StringBuffer(str);
      //2. 使用append方法
      StringBuffer s2=new StringBuffer();
      StringBuffer append=S2.append(str);
      
    • StringBuffer 转 String

      //1.toString方法
      StringBuffer s3=new StringBuffer("hhh");
      String s=S3.toString();
      
      //使用构造器
      String ss=new String(S3);
      
  3. 常用方法

    • append 追加,增,返回StringBuffer
    • delete 删除 delete(11,14) 删除11-14 的字符 [ )
    • replace(9,11," sdd"); 位置替换
    • indexof() 返回位置
    • insert(9,“sds”); 从索引9位置插入数据,其余数据后移
    • length() 长度
  4. 空对象创建StringBuffer后长度为 4 null 的长度

2. StringBuilder

说明: 一个可变的字符序列。 此类提供一个与StringBuffer兼容的API,但不保证同步,该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为大多数实现中,要比StringBuffer更快。

  1. StringBuilder原码解读:

    • StringBuilder的直接父类是 AbstractStringBuilder
    • StringBuilder 实现了 Serializable,即StringBuffer 的对象可以串行化
    • 在父类中 AbstractStringBuffer 有属性 char[] value, 不是final
    • 该value数组存放字符串内容,引出存放在堆中的数据
    • StringBuilder是一个 final类,不能被继承
    • 因为StrngBuilder字符内容是存在char[] value,所以在变化时,不用每次都更换地址(即创建新的对象),效率高于String。
    • StringBuilder 的方法,没有做互斥处理,即没有 synchronized 关键字,因此在单线程的情况下使用
  2. String StringBuffer StringBuilder比较

    • StringBuffer StringBuilder 非常类似,均代表可变的字符序列,而且方法也一样。

    • String 不可变字符序列,效率低,但是复用率高。(在常量池中相同的数据,指向相同的地址)

    • StringBuffer :可变字符序列,效率较高(增删) 线程安全

    • StringBuilder: 可变字符序列,效率较高,线程不安全

    • 如果需要执行多次改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。极大影响性能。==》

      如果我们对String做大量修改,不要使用String

    • 效率: StringBuilder > StringBuffer > String

  3. 使用场景:

    • 如果字符串存在大量的修改操作,一般使用StringBuffer或StringBuilder
    • 如果字符串存在大量的修改操作,并在单线程的情况下,使用StringBuilder
    • 如果字符串存在大量的修改操作,并在单线程的情况下,使用StringBuffer
    • 如果我们字符串很少修改,被多个对象引用,使用String
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值