一、StringBuilder
一个可变的字符序列。此类提供了一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候使用的时候。如果可能,简易有限采用该类,因为在大多数实现中,它比StringBuffer要快。
在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转化成字符串,让后将该字符串的字符添加或插入到字符串生成器中。append方法始终将这些字符添加到生成器末端;而insert方法则在指定的点添加字符。
简言之就是append是在当前一引用末尾添加,例如:sb.insert(4,"le"),结果为startle;insert,可以指定添加的位置例如:sb.insert(4,"le"),结果为starlet.
二、StringBuffer
线程安全的可变字符串序列。一个类似于String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变字符串序列的长度和内容。
可将字符串缓冲区安全地用于多线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer上的操作主要是append和insert方法,可以重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串添加或插入到字符串缓冲区中。append方法始终将这些字符串天剑到缓冲区末端;二insert方法则在指定的点添加字符。和StringBuider的append和insert方法一样。
通常,如果sb引用StringBuider的一个实例,则sb.append(x)和sb.insert(sb.length(),x)具有相同的效果。
只要发生有关源序列(如在原序列中添加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源sahnghai实现同步。
每个字符串缓冲区都有一定的容量。如果字符串缓冲区包含的字符序列长度没有超出此容量,就无需分配新的内容缓冲区的容量。
如果内部缓冲区溢出,则此容量自动增大。从JDK5开始,为该类填充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度要更快。