1.String、StringBuffer、StringBuilder三者都是通过其类中定义的一个字符数组来村塾字符串的内容。String类中的那个字符数组时用final修饰,因此String类型具有不可变性。当通过方法来对其修改时,会返回一个新的字符串,对原来的字符串是没有任何影响的。
String str = new String("abcdef");
str.replace('c','A');
System.out.println(str);
如上,String类型的字符串是不会改变字符串本身的。
2.
在StringBuffer类中保存了一个“动态”数组,用来存储字符串的内容。没有用final修饰,因此当对StringBuffer类型字符串进行操作时,会影响字符串的本身。
StringBuffer string = new StringBuffer("a");
string.append("bc");
System.out.println(string);
上面代码输出的结果为“abc”;
3.
StringBuilder和StringBuffer唯一的区别是StringBuilder类中的方法用synchronized关键字修饰。它线程安全但效率低,而StringBuilder的效率更高。
4. StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。它们有很多相同的方法。