String、StringBuffer、StringBuilder三者的区别和使用场景

小熊博客
2021-06-02 / 0 评论 / 296 阅读
温馨提示:
本文最后更新于2021-06-02,若内容或图片失效,请留言反馈。

String、StringBuffer、StringBuilder三者的区别

String

String类中使用final关键字修饰字符数组来保存字符串,所以String是不可变的。因为String不可变所以它是线程安全的。
image.png

注意:Java9之后String的实现由char[]改为byte[]存储字符串

StringBuilder和StringBuffer

StringBuilder和StringBuffer都继承自AbstractStringBuilder类,在 AbstractStringBuilder中也是使用字符数组保存字符串char[]value 但是没有用final关键字修饰,所以这两种对象都是可变的。但是StringBuffer实现AbstractStringBuilder类时加了synchronized修饰符所以StringBuffer是线程安全的。
image.png
image.png

总结

  1. 操作少量的数据: 适用String(性能快线程安全)
  2. 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder(单线程无线程安全问题,当然性能优先)
  3. 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer(多线程需要保证线程安全)