String:实用public final修饰的类。所以String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象。
String类是final修饰的,不能被继承。
StringBuffer和StringBuilder类对象为可修改对象,可以通过append()来修改值。
StringBuffer和StringBuilder都继承了Abstract StringBuilder(抽象类)。
StringBuffer大部分方法都是synchronized,也就是线程安全的,而StringBuilder就没有,所以,我们查看API可以知道,StringBuilder可以操作StringBuffer,但是StringBuffer不可以操作StringBuilder,这也是线程的原因;
所以,可想而知,StringBuffer的效率肯定没有StringBuilder,因为StringBuffer要维持同步锁,这肯定要消耗部分资源。
总结:
如果要操作少量的数据用:String
单线程操作字符串且操作较多数据:StringBuilder(线程不安全)
多线程操作字符串且操作较多数据:StringBuffer(线程安全)
执行速度:
StringBuilder > StringBuffer > String