- String 字符序列不可变的对象
- StringBuild 字符序列可变的对象
- StringBuffer 字符序列可变的对象
相同点:三者都是字符串对象,底层实现都是用 char[] 数组
一.String
奇怪的是字符串String的值可以改变
String s1 = "abc";
s1 = "def";
System.out.println(s1);
//输出结果为 def
因为s1的引用本来是指向字符串"abc"
但是后来把s1的引用又指向字符串"def"
所以值变了 ,其实是因为引用变了,但字符串本身是不会变的
二.StringBuffer
StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。
StringBuffer 对象一旦得到了想要输出的字符串,就调用toString()方法将结果转换为String类型
StringBuffer sb = new StringBuffer("abc");
System.out.println(sb.append("def"));
//输出结果为abcdef 字符序列也就变了
三.StringBuilder
它和StringBuffer其实基本使用都差不多,也有append()、insert()、reverse()、setCharAt()、setLength()等方法,唯一的不同可以从以下代码中看出StringBuffer是线程安全的,性能略低,而StringBuilder则没有实现线程安全功能,所以性能略高。
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
开发中建议大家使用:StringBuffer 或 StringBuilder 操作起来更为方便。