String,StringBuffer,StringBuilder的区别
(1)是否可变
String:字符串常量,在修改的时候不会改变自身,若修改,等于重新生成一个字符串对象。
StringBuffer和StringBuilder:在修改的时候会改变对象自身,每一次的修改都是对对象本身的修改,不是生成新的对象。使用场景:对字符串经常改变的情况下,主要方法:append(),insert()等。
(2)线程是否安全
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据。
StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
(3)共同点
StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)。
StringBuilder、StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如 super.append(...)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder 效率高于 StringBuffer。