String类是不可变类,即一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。每次使用String的方法时,就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用StringBuilder类。
StringBuilder()
构造一个没有任何字符的StringBuilder,初始容量只有16个字符。
StringBuilder(CharSequence seq)
根据指定的CharSequence对象构造一个StringBuilder对象,它们的字符相同。
StringBuilder(int capacity)
构造一个指定容量但没有任何字符的StringBuiler对象。
StringBuilder(String str)
根据一个字符串构造一个StringBuilder对象。
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)
由于继承了Appendable接口,所以要实现append方法,StringBuilder类对几乎所有的基本类型都重载了append方法。
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)
insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法。
其他的一些方法:
上面的那些方法会增加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处的字符;
void setLength(int newLength)
可能会改变内容(添加’\0’);
下面这些方法不会改变内容:
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的容量到真实内容大小;
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
StringBuffer()
构造一个没有任何字符的StringBuffer,初始容量只有16个字符。
StringBuffer(CharSequence seq)
根据指定的CharSequence对象构造一个StringBuffer对象,它们的字符相同。
StringBuffer(int capacity)
构造一个指定容量但没有任何字符的StringBuffer对象。
StringBuffer(String str)
根据一个字符串构造一个StringBuffer对象。
与StringBuilder方法相同。
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。
StringBuilder是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
StringBuiffer也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。