String,StringBuilder,StringBuffer的区别
| 可变性 | 线程安全性 | 性能 |
String | 使用 final 关键字数组保存字符串 private final char value[]所以不可变 | 因为对象是不可变的,也就可以理解为常量,线程安全 | String 发生一次改变,就要生成一个新的 String 对象,数据量大的时候,性能很低 |
StringBuilder | 继承自 AbstractStringBuilder 类,没有 final 修饰,字符串对象是可变的 | 定义了字符串的基本操作,append、insert、等公共方法,非线程安全 | 对对象本身进行操作,性能高 |
StringBuffer | 同 StringBuidler | 在 StringBuilder 基础上,对方法加了同步锁,线程安全 | 由于加了同步锁,比 StringBuilder 性能稍微低一些 |
总结:
1. 少量数据:String
2. 单线程,大量数据:StringBuilder
3. 多线程,大量数据:StringBuffer