1.可变性
String是不可变的,因为底层是final修饰的char数组。
StringBuffer和StringBuilder对象是可变的
所以每次对String类型改变的时候,都会重新生成对象,然后指针指向新的对象,多次这样会产生很多无引用对象,JVM的GC就会启动,导致系统性能下降。
修改String对象的原理:首先创建一个StringBuffer对象,调用append()方法,最后toString()。
2.线程安全
String和StringBuffer是安全的,String由特性决定,StringBuffer则是有synchrosized锁。
Stringbuilder不是线程安全的
3.初始化不同
StringBuilder、StringBuffer只能用构造函数的形式来初始化
String还可以直接赋值的。