StringBuilder

时间:

StringBuilder是什么?

  • StringBuilder是一个可变的字符序列。
    但StringBuilder在单线程中的性能比StringBuffer高。
  • 一般用在字符串缓冲区被单个线程使用的时候
    如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
  • StringBuilder类可以用于在无需创建一个新的字符串对象情况下修改字符串

StringBuilder StringBuffer String 区别

  • StringBuilder提供一个与 StringBuffer 兼容的 API,但不保证同步。
  • StringBuilder不是线程安全的,而StringBuffer是线程安全的。
  • StringBuilder,StringBuffer可以用于在无需创建一个新的字符串对象情况下修改字符串
  • String类是字符串常量,是不可更改的常量。
    因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String
  • StringBuffer,StringBuilder是字符串变量,它的对象是可以扩充和修改的。

StringBuilder 的 append 和 insert

  • append 方法始终将这些字符添加到生成器的末端;
  • insert 方法则在指定的点添加字符

示例:

System.Text.StringBuilder s = new System.Text.StringBuilder();
s.append("start");
//s.insert(4,"le");
s.append("le");

PS:
s.append(“le”) 将使字符串生成器包含“startle”,
而 s.insert(4, “le”) 将更改字符串生成器,使之包含“starlet”。

特殊情况

  • String 对象的字符串拼接其实是被 JVM 解释成了StringBuffer或StringBuilder对象的拼接 String
    效率是远要比 StringBuffer或StringBuilder快。

    String S1 = “This is only a” + “ simple” + “ test”;
    StringBuilder S2 =new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

    String s1 = “This is only a” + “ simple” + “test”;
    String s2 = “This is only a simple test”;

    VM会将s1直接视为s2;

  • 当然,非字符串拼接StringBuilder比String+String快;

String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;

StringBuilder s =new StringBuilder();
s.append(“This is only a”);
s.append(“ simple”);
s.append(“ test”);