问题

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


#1 热门回答(1441 赞)

StringBuffer是同步的,StringBuilder不是。


#2 热门回答(661 赞)

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);
        }
    }
}

Atest runStringBuilder提供2241 ms的数字,StringBuilder提供753 ms的数字。


#3 热门回答(226 赞)

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

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

这很关键。

引用自StringBuilder API

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

所以它取而代之。

VectorArrayList也是如此。


原文链接