String、StringBuffer、StringBuilder三者的区别
String
String类中使用final关键字修饰字符数组来保存字符串,所以String是不可变的。因为String不可变所以它是线程安全的。
注意:Java9之后String的实现由char[]改为byte[]存储字符串
StringBuilder和StringBuffer
StringBuilder和StringBuffer都继承自AbstractStringBuilder类,在 AbstractStringBuilder中也是使用字符数组保存字符串char[]value 但是没有用final关键字修饰,所以这两种对象都是可变的。但是StringBuffer实现AbstractStringBuilder类时加了synchronized修饰符所以StringBuffer是线程安全的。
总结
- 操作少量的数据: 适用String(性能快线程安全)
- 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder(单线程无线程安全问题,当然性能优先)
- 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer(多线程需要保证线程安全)
评论区