区别:StringBuffer类可以改变字符串中的内容,而String类则无法改变被初始化过的字符串内容(改变的只是String字符串的引用位置)
public class TestDemo {
public static void main(String [] args) {
// StringBuffer类不可以直接赋值实例化,必须new开辟空间
StringBuffer buf = new StringBuffer();
// 调用append()方法,向StringBuffer实例化的空间String添加内容
buf.append("Hello").append("World").append("!") ;
change(buf) ; // 引用传递
System.out.println(buf);
}
public static void change(StringBuffer temp) {
temp.append("\n").append("HUAWEI_nb") ;
// 向 字符串 添加 后续字符串(一个换行和一行字符)
}
}
通过 StringBuffer 是可以修改的,上述代码则通过 append() 方法来后续添加字符,改变初始后的字符串buf内容
String类 | StringBuffer类 |
---|---|
java.lang.Object |--java.lang.String | java.lang.Object |-- java.lang.StringBuffer |
public final class Stringextends Objectimplements Serializable, Comparable, CharSequence | public final class StringBufferextends Objectimplements Serializable, CharSequence |
通过对两个类的继承结构对比发现,都是同一个 CharSequence 接口的子类
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer("Hello,World!");
System.out.println(buf);
}
}
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer();
buf = append("Hello,World!");
System.out.println(buf);
}
}
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer("Hello,World!");
String str = buf.toString();
System.out.println(str);
}
}
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer("Hello,World!");
System.out.println(buf.reverse());
}
}
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer("Hello,World!");
buf.insert(0,"China ").insert(5, "Huawei ");
System.out.println(buf);
}
}
public class TestDemo {
public static void main(String [] args) {
StringBuffer buf = new StringBuffer("Hello,World!");
buf.delete(0,3);
System.out.println(buf);
}
}
从JDK 1.5以后,增加了新的字符串操作类——StringBuilder类
StringBuffer类和StringBuilder类的定义非常的相似,几乎连类方法也是一样的。