类 StringBuilder 表示可改变大小的字元序列( sequence of characters ),多个字元组成字元序列,字元序列和字元串是同一个意思。该类所提供的 API 和类 StringBuffer 提供的 API 是兼容的。区别在于,类 StringBuffer 的 API 是同步的,即是执行绪安全的,而类 StringBuilder 的 API 不是同步的,即执行绪不安全的。通常来说,若声明的字元串出现单执行绪的环境,即不是执行绪共享的环境,不存线上程安全的问题,应该使用类 StringBuilder 代替类 StringBuffer ,这是类 StringBuilder 设计的初衷。理由是,类 StringBuilder 的大多数 API 的运行速度要快于类 StringBuffer 所对应的 API 。但再次强调,类 StringBuilder 的 API 是执行绪不安全的。
类 StringBuilder 有两个核心的 API ,分别是 append 和 insert 。前者的功能是在原来的字元串的尾部追加指定的字元串,后者的功能是在原来的字元串的指定位置插入指定的字元串。
比如,现在有个 StringBuilder 类型的字元串[ start ],声明为
StringBuilder z = new StringBuilder("start");
那幺,
z.append("le") 等于 startle
表示在原来字元串[ start ]的尾部追加字元串[ le ]。
z.insert(4, "le") 等于 starlet
表示在原来字元串[ start ]的偏移量为 4 的位置,插入指定的字元串[ le ],原先处于偏移量为 4 以及之后的所有字元,全部向后移动,腾出空间插入指定的字元串[ le],如右图所示。
package cn.test;public class Test00 { public static void main(String[] args) { // 输出 startle // StringBuilder z = new StringBuilder("start"); // System.out.println(z.append("le")); // 输出 starlet StringBuilder z = new StringBuilder("start"); System.out.println(z.insert(4, "le")); }}
package cn.test;public class Test { public static void main(String[] args) { // 输出 startx StringBuilder z = new StringBuilder("start"); System.out.println(z.append("x")); // 输出 startx // StringBuilder z = new StringBuilder("start"); // System.out.println(z.insert(z.length(), "x")); }}