为了高效拼接字符串,java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。 扩展,StringBuilder可以进行链式操作
public static void main(String[] args) { var sb = new StringBuilder(1024); sb.append("Mr ") .append("Bob") .append("!") .insert(0, "Hello, "); System.out.println(sb.toString()); }这种情况产生的原因是因为该append()方法每次返回的都是该实例本身即this。 因此,我们也可以仿造做出链式操作。
这是java早期的一个StringBuilder线程安全版本,其用来保证多个StringBuffer共同运行也能线程安全,但带来效率低下的问题。 因此相对的StringBuilder不是线程安全的,但执行速度较快。 所以在要求线程安全时,用到StringBuffer,而没有要求线程安全,推荐使用StringBuilder。 StringBuilder和StringBuffer两者操作是相同的,构造器和方法也相同
String对象被创建之后,该对象不可修改,因此引入了上边两个类,用做String的修改。 StringBuilder执行效率高,线程不安全。 StringBuffer执行效率低,线程安全。