StringBuilder&StringBuffer

1
2
3
4
5
6
7
8
9
10
11
public class Main1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append(1).append(2).append(3).append(4).append(5);
System.out.println(sb.toString()); //12345

StringBuffer sb2 = new StringBuffer();
sb2.append(1).append(2).append(3).append(4).append(5);
System.out.println(sb2.toString()); //12345
}
}

String/StringBuffer/StringBuilder

  • String是不可变的字符串对象,底层是final修饰的byte或者char数组(版本不同)
  • StringBuilder是字符串生成器,是可变的字符串对象,底层是可变的,支持自动扩容。
  • StringBuffer是字符串缓冲区,是可变的字符串对象,底层也可变,支持自动扩容
  • StringBuffer是线程安全的,因为其方法被synchronized修饰
  • StringBuilder虽然线程不安全,但是在单线程的时候,其效率比StringBuffer高
  • StringBuilder和StringBuffer支持所有相同的操作

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从
JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用
StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

— JDK1.6官方文档


StringBuilder&StringBuffer
https://blog.wangxk.cc/2020/08/20/StringBuilder-StringBuffer/
作者
Mike
发布于
2020年8月20日
许可协议