String&StringBuffer&StringBuilder的区别

String

  • String为不可变的。所以对字符串每次操作都会新建一个String。
  • java.lang.String 为public final class String implements java.io.Serializable, Comparable, CharSequence 被final修饰,所以为不可变的类。
  • 操作频繁,产生大量开销

StringBuffer&StringBuiler

  • StringBuffer&StringBuiler在内部都维护着字符数组
  • append方法,就是对字符数组进行操作
public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
    }
  • StringBuffer为线程安全的,方法上都会加上synchronized 关键字,同步。
public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
 }
      ```
-  StringBuffer为线程不安全的,没有加锁,释放锁,所以效率更高。

你可能感兴趣的:(String&StringBuffer&StringBuilder的区别)