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