StringBuilder是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的
API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串
缓冲区被单个
线程使用的时候(这种情况很普遍)。
简介
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 在 StringBuilder 上的主要操作是 append 和
insert缓冲区。如果内部
缓冲区溢出,则此容量自动增大。 将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用
StringBuffer。StringBuilder类可以用于在无需创建一个新的字符串对象情况下修改字符串。StringBuilder不是线程安全的,而StringBuffer是线程安全的。但StringBuilder在单线程中的性能比StringBuffer高。
来源
StringBuilder据我所知,是C sharp(
C#)中先有的。
在Java中,首先出现的是
StringBuffer,而StringBuilder类来源于jdk1.5及以后的版本,jdk1.4(包括1.4)之前是不存在该类的。请注意不要在jdk1.4的环境里使用StringBuilder类,否则会出错。
区别
StringBuffer 和 StringBuilder 类的区别
StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
以上实例编译运行结果如下:
StringBuilder原理
StringBuilder的原理和StringBuffer一样,不同之处在于StringBuilder不需要考虑线程安全。具体的原理参见另一篇StringBuffer详解。
常用方法
StringBuilder的常用方法和StringBuffer的一样。列出如下:
构造函数
StringBuilder有四个构造函数:
StringBuilder() value内容为空,并设置容量为16个字节;
StringBuilder(CharSequece seq) 使用seq初始化,容量在此基础上加16;
StringBuilder(int capacity) 设置特定容量;
StringBuilder(String str) 使用str初始化,容量str大小的基础上加16;
append方法
由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法:
append(boolean b)
append(char c)
append(char[] str)
append(char[] str,int offset,int len)
append(CharSequence s)
append(CharSequence s,int start,int end)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String str)
append(StringBuffer sb)
insert方法
insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:
insert(int offser,boolean b)
insert(int offset,char c)
insert(int offset,char[] str)
insert(int index,char[] str,int offset,int len)
insert(int dsfOffset,CharSequence s)
insert(int dsfOffset,CharSequence s,int start,int end)
insert(int offset,double d)
insert(int offset,float f)
insert(int offset,int i)
insert(int offset,long l)
insert(int offset,Object obj)
insert(int offset,String str)
其它会改变内容的方法
上面的那些方法会增加StringBuilder的内容,还有一些方法可以改变StringBuilder的内容:
StringBuilder delete(int start,int end) 删除从start到end(不包含)之间的内容;
StringBuilder deleteCharAt(int index) 删除index位置的字符;
StringBuilder replace(int start,int end,String str) 用str中的字符替换value中从start到end位置的子序列;
StringBuilder reverse() 反转;
void setCharAt(int index,char ch) 使用ch替换位置index处的字符;
其它常用方法
下面这些方法不会改变内容:
int capacity() 返回value的大小即容量;
int length() 返回内容的大小,即count;
char charAt(int index) 返回位置index处的字符;
void ensureCapacity(int minimumCapacity) 确保容量至少是minimumCapacity;
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
int indexOf(String str) 返回str第一次出现的位置;
int indexOf(String str,int fromIndex) 返回从fromIndex开始str第一次出现的位置;
int lastIndexOf(String str) 返回str最后出现的位置;
int lastIndexOf(String str,int fromIndex) 返回从fromIndex开始最后一次出现str的位置;
CharSequence subSequence(int start,int end) 返回字符子序列;
String substring(int start) 返回子串;
String substring(int start,int end) 返回子串;
String toString() 返回value形成的字符串;
void trimToSize() 缩小value的容量到真实内容大小;