前言
上一文熟悉了Java的String类操作,本文针对于String类型相似的StringBuffer和 StringBuilder类进行操作。当然,使用StringBuffer和 StringBuilder是对经常进行更新修改而不需要创建新的对象。下面开始介绍。
StringBuffer
StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
优点
- 可变长
- 线程安全的
- 多线程操作
缺点
- StringBuffer效率比StringBuilder效率低。
StringBuilder
StringBuilder是可变类,和线程不安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuilder对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
优点
- 可变长
- 线程不安全的
- 单线程操作
缺点
- StringBuilder效率StringBuffer比效率低。
StringBuffer常用方法
append
append(String s)将指定的字符串追加到此字符序列。
reverse
reverse()将此字符序列用其反转形式取代。
delete
delete(int start, int end)移除此序列的子字符串中的字符。
insert(int offset, int i)
insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。
insert(int offset, String str)
insert(int offset, String str)将 str 参数的字符串插入此序列中。
replace(int start, int end, String str)
replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。
StringBuffer常用方法
capacity()
int capacity()返回当前容量,类型为int值。
charAt(int index)
char charAt(int index)返回此序列中指定索引处的char值。
ensureCapacity(int minimumCapacity)
ensureCapacity(int minimumCapacity)确保容量至少等于指定的最小值。
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将字符从此序列复制到目标字符数组 dst,无返回值。
indexOf(String str)
int indexOf(String str)返回第一次出现的指定子字符串在该字符串中的索引。
indexOf(String str, int fromIndex)
int indexOf(String str, int fromIndex)从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
lastIndexOf(String str)
int lastIndexOf(String str)返回最右边出现的指定子字符串在此字符串中的索引。
lastIndexOf(String str, int fromIndex)
int lastIndexOf(String str, int fromIndex)返回 String 对象中子字符串最后出现的位置。
length()
int length()返回长度(字符数)。
setCharAt(int index, char ch)
void setCharAt(int index, char ch)将给定索引处的字符设置为 ch。
setLength(int newLength)
void setLength(int newLength)设置字符序列的长度。
subSequence(int start, int end)
CharSequence subSequence(int start, int end)返回一个新的字符序列,该字符序列是此序列的子序列。
substring(int start)
String substring(int start)返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
substring(int start, int end)
String substring(int start, int end)返回一个新的 String,它包含此序列当前所包含的字符子序列。
toString()
String toString()返回此序列中数据的字符串表示形式。
总结
- String:不可变字符序列
- Stringbuffer:可变字符序列、效率低、线程安全
- String Builder(JDK1.5):可变字符序列、效率高、线程不安全
Stringbuilder和 String Buffer非常类似,均代表可变的字符序列,而且方法也一样。多次执行这些改变串内容的操作,String会导致大量副本字符串对象存留在内存中,降低效率,如果这样的操作放到循环中,会极大影响程序的性能,建议使用Stringbuilder和 String Buffer。