1 String
String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的
查看它的源码
public String() {
this.value = "".value;
}
变量value
private final char value[];
被final修饰的类不能有子类,被final修饰的变量只能在构造函数中进行一次赋值,当然这个包含局部变量和成员变量
2 StringBuffer
StringBuffer:字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法 看下它的appent()方法
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
它是被synchronized修饰的,所以它多线程环境下是安全的
3 StringBuilder
StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被当作是一个包含字符序列的变长数组
也看下它的appent()方法
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
从这二个方法中就可以看到的出来StringBuffer和StringBuilder的区别,
所以在单线程中使用StringBuffer 在多线程环境下使用StringBuilder