String StringBuffer和StringBuilder的区别
可变性 基于1.8说
String 类中使用final 关键字修饰字符数组来保存字符串, private final char value[] 所以String对象不可变
而 StringBuilder
与 StringBuffer
都继承自 AbstractStringBuilder
类,在 AbstractStringBuilder
中也是使用字符数组保存字符串char[]value
但是没有用 final
关键字修饰,所以这两种对象都是可变的。
线程安全性
String 对象不可变 可以理解为线程安全的
StringBuilder和StringBuffer 是 AbstractStringBuilder的子类 都继承了父类的方法。StringBuffer对方法加了同步锁 对调用的方法加了同步锁 所以线程安全的, StringBuilder没加同部锁所以是非线程安全的。
性能
String每次改变都产生新的对象 Stringbuide效率快一点 Stringbuffer线程安全 慢一点