String,StringBuffer,StringBuilder区别是什么?

  • 可变性

    • String 不可变,是由定义final的字符数组实现的

      /* The value is used for character storage. /
      private final char value[];

    • StringBuffer、StringBuilder均可变,是由定义了临时数据transient的字符数组实现的

      /**
      * A cache of the last value returned by toString. Cleared
      * whenever the StringBuffer is modified.
      */
      private transient char[] toStringCache;

  • 是否线程安全

    • String 对象不可变,即不可变对象永远是线程安全的
    • StringBuffer对方法加了同步锁synchronized,所以是线程安全的,比如获取其长度

      @Override
      public synchronized int length() {
      return count;
      }

    • StringBuilder并没有对方法加同步锁synchronized,所以是非线程安全的,比如添加字符

      @Override
      public StringBuilder append(String str) {
      super.append(str);
      return this;
      }

你可能感兴趣的:(java)