目录

String

String 是不可变的,定义之后不能再修改,看源码可知,内部结构是一个 final 类型的 char 数组。

我们所说的字符串变化了,是因为引用指向了新对象而已。

StringBuilder

StringBuilder 和 ArrayList 非常像,内部结构都是数组,都支持动态扩容。

使用 append 方法拼接字符串更加方便。

StringBuffer

StringBuffer 基本上和 StringBuilder 完全一样。

明显的不同就是 StringBuffer 是线程安全的,除了构造方法之外的所有方法都用了 synchronized 关键字修饰。

同步牺牲了性能,性能上要比 StringBuilder 差一些。

字符串拼接

使用字符串连接符+做字符串拼接,每做一次拼接,就需要创建一个 StringBuilder 对象。(可以从反编译代码中看出)

PS:String str = 'a' + 'b' + 'c'算作一次拼接。

在连续多次拼接的场景中,既消耗资源拼接速度又慢。(创建对象需要消耗资源与时间、扩容需要时间)

【原则很简单】

拼接字符串使用 StringBuilder 的 append 方法。

而且如果我们已经知道了字符串容量,可以一次性分配一个 StringBuilder,避免扩容时候的开销。

10-11 18:51