1,可变与不可变
String是字符串常量,使用final修饰,所以是不可变的.
StringBuffer和StringBuilder是字符串变量.都继承自AbstractStringBuilder类,内部使用字符数组保存字符串,没有final修饰.所以是可变的.
2,是否线程安全
String是不可变的,显然线程安全.
StringBuffer使用synchronized对方法加了锁,所以线程安全.
StringBuilder没有加锁,所以线程不安全.
3,
如果要操作少量的数据用String,因为String str ="i"+" love"+" you"; 其实就是String str ="i love you"; 所以速度最快.
在单线程下,使用StringBuilder效率比StringBuffer高.
在多线程下建议使用StringBuffer.