StringBuffer和StringBuilder
StringBuffer
和StringBuilder
是String
的增强类,String底层是一个final修饰的byte[]
的数组,一旦创建不可改变,StringBuffer
和StringBuilder
的没有用final修饰,所以可变;
两者都继承自AbstractStringBuilder
类,实现了Serialzable
、Comparable
、CharSequence
接口;
两者的区别在于:
StringBuffer
中的方法都有:synchronized
关键字修饰。表示StringBuffer
在多线程环境下运行是安全的。StringBuilder
中的方法都没有:synchronized
关键字修饰,表示StringBuilder
在多线程环境下运行是不安全的。
§ 初始化
直接初始化
/*创建空字符串*/
StringBuilder sb = new StringBuilder();
指定初始大小
/*创建一个指定初始容量的字符串*/
StringBuilder sb = new StringBuilder(20);
用字符串初始化
/*创建有初始内容的字符串*/
StringBuilder sb = new StringBuilder("ahh");
§ 常用api
判断
int length()
:
返回字符串长度
int compareTo(StringBuffer another)
:
判断和另一个
StringBuffer
的大小关系
int capacity()
:
返回当前
StringBuffer
的容量
修改
StringBuffer append(String str)
:
追加类容到
StringBuffer
末尾,返回的是StringBuffer
本身
void setCharAt(int index, char ch)
:
在index下标插入ch
StringBuffer deleteCharAt(int index)
:
删除下标处的内容,返回
this
StringBuffer delete(int start, int end)
:
删除[start, end)之间的内容,返回this
StringBuffer insert(int offset, String str)
:
在index下标处插入str
String可重载int,char等基本类型
查找
参考String的charAt
、indexOf
和lastIndexOf
反转
StringBuffer reverse()
:
反转字符串,返回
this
替换
StringBuffer replace(int start, int end, String str)
:
将[start, end)范围内替换为str
截取
String substring(int start, int end)
:
有end,截取[start, end)范围
无end,截取start开始到结尾
§ 使用原则
- 如果要操作少量的数据,用
String
;- 单线程操作大量数据,用
StringBuilder
;- 多线程操作大量数据,用
StringBuffer
。