在实际的工作中,处理字符串,String、StringBuilder、StringBuffer是经常用到的,分析一下三者的区别。
1、三个类之间的关系
通过查看JDK的源码我们会发现:StringBuffer和StringBuilder都继承自AbstractStringBuilder这个类,而AbstractStringBuilder和String都继承自Object这个类(Object是所有java类的超类),所以三个类之间的关系是:
Object——>String
Object——>AbstractStringBuilder——>StringBuffer、StringBuilder
2、可变性
String:不可变,String的+实际是每次新创建一个对象,再进行拼接,赋值给新的对象,最后回收掉两次拼接的对象。
StringBuffer、StringBuilder :是可变的。API中包含append、insert、delete方法。
3、执行速度
StringBuilder > StringBuffer > String
4、线程安全
StringBuilder是线程不安全的,而StringBuffer是线程安全的
5、总结一下使用场景
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况