1. String,被 final 修饰了,因为它是不可变的,在拼接字符串的时候会产生新的对象。

  2. StringBuffer,为了解决字符串在拼接过程中产生额外的中间对象,就有了 StringBuffer,提供了 append 和 add 方法来进行字符串的操作,减少了额外的开销,但是它是线程安全的,会影响一些性能。

  3. StringBuilder,和 StringBuffer 差不多,不过它是非线程安全的,所以呢,在做字符串操作的时候,优先选择 StringBuilder。