1.String
- final class,所有属性也都是final的
- 最主要的,拼接裁剪等都会产生新的String对象,所以可能会影响性能。为了解决这一问题,有了下面两个类
2.StringBuffer
- 解决String拼接产生中间对象问题
- 使用add或append方法就可以把字符串添加到已有序列的末尾或指定位置
- 本质是个线程安全的可修改字符序列,保证了线程安全,也随之带来了额外的性能开销
- 除非有线程安全的需要,否则推荐StringBuilder
3.StringBuilder
- StringBuilder 是 Java 1.5 中新增的,在能力上和 StringBuffer 没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选
4.拓展
4.1 字符串设计
- String 是 Immutable 类的典型实现,原生的保证了基础线程安全,因为你无法对它内部数据进行任何修改
- StringBuffer的线程安全是通过把各种修改数据的方法都加上 synchronized 关键字实现的
- 为了实现修改字符序列的目的,StringBuffer 和 StringBuilder 底层都是利用可修改的(char,JDK 9 以后是 byte)数组,二者都继承了 AbstractStringBuilder,里面包含了基本操作,区别仅在于最终的方法是否加了 synchronized
- Java8会自动把”+“转换为StringBuider去拼接