2022-5-18_java

2022-5-18_java

StringBuffer类

可变的字符序列, 可以对字符串内容增删.

直接父类是AbstractStringBuilder, 实现了Serializable

AbstractStringBuilder中有char数组而且不是final类型, 存字符串内容, 存放在堆中

StringBuffer是一个final类, 不能被继承

  1. String保存字符串常量, 里面的值不能更改, 每次String类更新实际上是改地址
  2. StringBuffer保存字符串变量, 可以改值, 效率较高.

StringBuffer的构造器

默认分配16个空间

StringBuffer()

放入一个字符串

也可以指定char[]的大小

String和StringBuffer相互转换

StringBuffer stringBuffer = new StringBuffer(str);str本身无影响

stringBuffer.append(str);先建空Buffer后添加也可以

StringBuffertoSting方法也可以

StringBuffer 常用的方法

  1. 增加 append
  2. 删除 delete(start, end)
  3. 改 replace(start, end, string) 被修改的不包含end
  4. 查 indexOf()
  5. 插入 insert(index) 原来index位置自动后移
  6. 获取长度 length

Exercise

分析需要看源码

StringBuilder结构分析

  1. 可变字符序列, 提供与StringBuffer兼容的API, 但不保证同步, 被设计为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时.
  2. StringBuilder上的主要操作是append和insert, 可重载.

在这里插入图片描述

结构图和StringBuffer几乎一致

StringBuilder常用方法

解读:

  1. 继承了AbstractStringBuilder类
  2. 实现了Serializable接口
  3. 是一个final类, 不能被继承
  4. 对象的字符序列, 还是存放在AbstractStringBuilder中的 char[] value中, 数据还是放在堆中的
  5. StringBuffer没有做互斥操作, 即没有synchronized关键字.

String, StringBuilder和StringBuffer的比较

  1. String不可变字符序列, 效率低, 但复用率高
  2. StringBuffer中有synchronized已同步
  3. StringBuilder 可变字符序列, 效率最高, 线程不安全
  4. String使用注意说明, 如果需要对String做大量修改, 不要使用String

结论

  1. 如果字符串存在大量的修改操作, 一般使用StringBuffer或StringBuilder
  2. 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
  3. 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值