网上搜索String,StringBuffer,StringBuilder三者区别,对于三者可变不可变,看到最多答案是:
String 是由final修饰,为不可变字符序列,StringBuffer,StringBuilder是可变的字符序列
答案是模棱两可,没看源码之前我理解的是
String类是由final修饰,而StringBuffer,StringBuilder不是由final修饰,所以String为不可变序列,StringBuffer,StringBuilder是可变的字符序列
看了源码之后发现三者都是由final修饰的
public final class String implements java.io.Serializable, Comparable<String>, CharSequence{}
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}
而真正导致String为不可变字符序列的是,由final修饰的一个char数组,final修饰的变量是不可变的
String:
/** The value is used for character storage. */
private final char value[];
线程安全问题:
StringBuffer 中方法是由synchronized修饰,是线程安全的
@Override
public synchronized int length() {
return count;
}
.......
关于synchronized的内容以后再补充。。。