2022-5-18_java
StringBuffer类
可变的字符序列, 可以对字符串内容增删.
直接父类是AbstractStringBuilder, 实现了Serializable
AbstractStringBuilder中有char数组而且不是final类型, 存字符串内容, 存放在堆中
StringBuffer是一个final类, 不能被继承
String保存字符串常量, 里面的值不能更改, 每次String类更新实际上是改地址StringBuffer保存字符串变量, 可以改值, 效率较高.
StringBuffer的构造器
默认分配16个空间
StringBuffer()
放入一个字符串
也可以指定char[]的大小
String和StringBuffer相互转换
StringBuffer stringBuffer = new StringBuffer(str);对str本身无影响
stringBuffer.append(str);先建空Buffer后添加也可以
StringBuffer的toSting方法也可以
StringBuffer 常用的方法
- 增加 append
- 删除 delete(start, end)
- 改 replace(start, end, string) 被修改的不包含end
- 查 indexOf()
- 插入 insert(index) 原来index位置自动后移
- 获取长度 length
Exercise
分析需要看源码
StringBuilder结构分析
- 可变字符序列, 提供与StringBuffer兼容的API, 但不保证同步, 被设计为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时.
- StringBuilder上的主要操作是append和insert, 可重载.

结构图和StringBuffer几乎一致
StringBuilder常用方法
解读:
- 继承了AbstractStringBuilder类
- 实现了Serializable接口
- 是一个final类, 不能被继承
- 对象的字符序列, 还是存放在AbstractStringBuilder中的
char[] value中, 数据还是放在堆中的 - StringBuffer没有做互斥操作, 即没有synchronized关键字.
String, StringBuilder和StringBuffer的比较
- String不可变字符序列, 效率低, 但复用率高
- StringBuffer中有
synchronized已同步 - StringBuilder 可变字符序列, 效率最高, 线程不安全
- String使用注意说明, 如果需要对String做大量修改, 不要使用String
结论
- 如果字符串存在大量的修改操作, 一般使用StringBuffer或StringBuilder
- 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
- 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
本文详细解析了Java中String与StringBuffer的区别,重点讲解了StringBuffer的构造、操作方法和适用场景,以及StringBuilder作为替代的选择。强调了在频繁修改字符串时,StringBuffer的效率优势和线程安全性。
4558

被折叠的 条评论
为什么被折叠?



