String:String可以理解为字符串常量,因为它创建的对象是final修饰的,不能被继承,也不能被改变,所以线程是安全的,如果改变改变了它对象的值,也就相当于创新创建了一个新的对象,把原来的对象释放掉。
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,对象可以修改,不会产生新的对象。
StringBuffer:字符串变量,对其对象进行修改不产生新的对象,方法加了同步锁或者对调用的方法加了同步锁,所以线程安全的,效率也要比String高,适用于多线程。
StringBuilder并没有对方法进行加同步锁,所以线程不安全,效率高于StringBuffer,适用于单线程。