Java stringbuffer的速度比string快。我可以知道他们是怎么做到的吗

Java stringbuffer的速度比string快。我可以知道他们是怎么做到的吗,java,string,append,Java,String,Append,当我们在java中处理字符串的连接时 为什么StringBuffer比String 在每个定义中,都说Stringbuffer比string快,但没有明确的细节来说明如何实现它。string是不可变的,如果您试图更改它们的值,就会创建另一个对象,而

当我们在java中处理字符串的连接时

为什么StringBufferString
在每个定义中,都说Stringbuffer比string快,但没有明确的细节来说明如何实现它。

string是不可变的,如果您试图更改它们的值,就会创建另一个对象,而是可变的,因此它们可以更改它们的值。这就是为什么StringBufferString

快的原因每次连接
String
对象时,字符串的内容都会复制到一个新的
String
实例中。因此,如果您有一个50个字符长的字符串,并且您附加了另一个字符,那么这50个字符都必须复制到一个新字符串中

StringBuffer
(或
StringBuilder
)有一个
char
数组,其长度可能大于它包含的当前内容量。随着更多文本添加到
StringBuffer
,数组将被填满,直到达到容量为止。数组的内容不需要每次都完全复制

(实际上,Java足够聪明,可以优化许多字符串连接,以使用
StringBuilder
,即使您没有显式地编写它们。)

来自Java文档

要提高性能,请使用
StringBuffer.append()

字符串对象是不可变的,它们在创建后不会更改。对于 例如,考虑下面的代码:

String str = "testing";
str = str + "abc";
编译器将此代码翻译为:

String str = "testing";
StringBuffer tmp = new StringBuffer(str);
tmp.append("abc");
str = tmp.toString();
因此,复制本身就很昂贵,过度使用会降低成本 表现显著


不,他们只是提到stringbuffer比string快,但我想问的是它是如何实现的?你可能正在阅读一本旧教科书或博客文章。最新版本的Java在速度上的差异与简单的连接差不多,即使在重要的地方,您也应该使用
StringBuilder
而不是
StringBuffer