虽然网上有很多关于它们三者的解析,也都解释的很好,但我也想根据我的个人理解谈谈Java中String、StringBuffer、StringBuilder的联系和区别。可能有误,望请指正。首先,它们都是final类的,也就是不可被继承,关于final的用法,我的上一篇博文也提了,这里不再过多论述。
在做一些字符串操作的时候,它们三者的执行速度为:String<StringBuffer<StringBuilder在线程安全性方面,前两者是线程安全的,后者是线程不安全的。究其原因,三者内部都是char[]数组实现的,而String内部char[]被final修饰,故为不可变的,而后两者继承自AbstractStringBuilder抽象类,其char[]未被final修饰且此抽象类实现了Appendable接口,故通过append()方法可改变其内容。
另外,String和StringBuffer实现线程安全的机制是不同的,String靠的是对象本身不能被修改,而StringBuffer对字符串的操作都是通过synchronized机制完成的。