String 和 StringBuffer 和 StringBuilder
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuffer是线程安全的,StringBuilder是非线程安全的。
StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
StringBuffer 和 StringBuilder 长度可变
StringBuffer 线程安全 StringBuilder 线程不安全
StringBuilder 速度快
StringBuffer:一个线程安全的,可变的字符序列。字符串缓冲区就像一个String,但可以修改。在任何时候它都包含一些特定的字符序列,但是序列的长度和内容可以通过某些方法调用来改变。字符串缓冲区对于多线程来说是安全的。这些方法在必要时进行同步,以便任何特定实例上的所有操作的行为就好像它们以某种连续顺序发生,这与每个涉及的单个线程所进行的方法调用的顺序一致。
上的主要操作StringBuffer是 append和insert方法,其被重载,以便接受任何类型的数据。每个函数都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区中。该 append方法总是将这些字符添加到缓冲区的末尾; 该insert方法在指定的点添加字符。
如果sb指的是a的一个实例StringBuffer,那么sb.append(x)效果与之相同 sb.insert(sb.length(), x)。
每个字符串缓冲区都有一个容量 只要包含在字符串缓冲区中的字符序列的长度不超过容量,就不需要分配新的内部缓冲区数组。如果内部缓冲区溢出,它会自动变大。从版本JDK 5开始,这个类已经补充了一个为单个线程设计的等价类StringBuilder。由于StringBuilder类支持所有相同的操作,所以通常会优先使用StringBuilder类,但速度更快,因为它不执行同步操作。
StringBuilder:一个可变的字符序列。这个类提供了一个兼容的API StringBuffer,但不保证同步。这个类被设计成在StringBuffer单个线程正在使用字符串缓冲区的地方(如通常情况下)用作嵌入式替换 。在可能的情况下,建议优先使用此类, StringBuffer因为在大多数实现中它会更快。
上的主要操作StringBuilder是 append和insert方法,其被重载,以便接受任何类型的数据。每个有效地将给定的数据转换为一个字符串,然后将该字符串的字符追加或插入到字符串生成器。该 append方法总是在构建器的最后添加这些字符; 该insert方法在指定的点添加字符。
StringBuilder多线程使用的实例不安全。如果需要这种同步,则建议StringBuffer使用。
String:String类代表字符串。Java程序中的所有字符串文字,例如"abc",都被实现为这个类的实例。
字符串是不变的; 他们的价值创造后不能改变。字符串缓冲区支持可变字符串。因为String对象是不可变的,所以它们可以共享。