2.String、StringBuffer、StringBuilder有什么区别

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去拼接

4.2 字符串缓存

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容