StringBuffer、StringBuilder得区别

165 阅读1分钟

异:

  1. StringBuffer是线程安全,StringBuilder是线程不安全
  2. StringBuffer得效率相对来讲要低,StringBuilder得效率较高

同:

  1. StringBuilder和StringBuffer以及String都是基于char[]
  2. StringBuilder与StringBuffer都继承于AbstractStringBuilder,他们得基本操作都是通过调用AbstractStringBuilder里面得方法实现得
  3. 前面说了是基于char[]得,所以肯定有内存再用问题,那么他们得char[]是怎么扩容多少呢

void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }

从上可看出首先将数组大小扩容为两倍,然后比较是否足够新得数组长度,如果够,则用扩容两倍得如果不够就用新数组得长度。