理解比较浅,不喜勿喷
1.可变与不可变
String是不可变的,StringBuffer和StringBuilder是不可变的。
既然String不可变为什么还会有以下代码成立
String str = "asd";
str = str+"edc";
System.out.println(str);
结果:asdedc
这是因为JVM在执行第二行的时候创建了一个新的String对象newstr,把str的值和"edc"加起来赋值给newstr。
2.是否多线程安全
String和StringBuffer是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。
String是由final修饰的,所以它线程安全。
StringBuilder的很多方法用synchronized修饰,所以他也是线程安全的。
3.初始化的方式不同
StringBuffer和StringBuilder只能用构造函数来初始化,String除了用构造函数赋值以外还能直接赋值。