协慌网

登录 贡献 社区

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