StringBuilder和StringBuffer的区别

StringBufferStringBuilder的主要区别是什么? 在决定其中的任何一个时,是否有任何性能问题?


StringBuffer是同步的, StringBuilder不是。


StringBuilderStringBuffer快,因为它没有synchronized

这是一个简单的基准测试:

public class Main {
    public static void main(String[] args) {
        int N = 77777777;
        long t;

        {
            StringBuffer sb = new StringBuffer();
            t = System.currentTimeMillis();
            for (int i = N; i --> 0 ;) {
                sb.append("");
            }
            System.out.println(System.currentTimeMillis() - t);
        }

        {
            StringBuilder sb = new StringBuilder();
            t = System.currentTimeMillis();
            for (int i = N; i > 0 ; i--) {
                sb.append("");
            }
            System.out.println(System.currentTimeMillis() - t);
        }
    }
}

测试运行给出的数字2241 msStringBuffer VS 753 msStringBuilder


基本上, StringBuffer方法是同步的,而StringBuilder不是。

这些操作“几乎”相同,但在单个线程中使用同步方法是矫枉过正的。

这很关键。

来自StringBuilder API的报价:

这个类[StringBuilder]提供了一个与StringBuffer兼容的API, 但不保证同步 。 此类用于在单个线程正在使用字符串缓冲区的位置(如通常情况下)用作StringBuffer的嵌入式替换。 在可能的情况下,建议将此类优先用于StringBuffer,因为在大多数实现中它会更快。

所以它取而代之。

VectorArrayList

链接地址: http://www.djcxy.com/p/1991.html

上一篇: Difference between StringBuilder and StringBuffer

下一篇: Strangest language feature