Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时以及如何有效地使用StringBuilder/Buffer?_Java_String_Stringbuilder_Stringbuffer - Fatal编程技术网

Java 何时以及如何有效地使用StringBuilder/Buffer?

Java 何时以及如何有效地使用StringBuilder/Buffer?,java,string,stringbuilder,stringbuffer,Java,String,Stringbuilder,Stringbuffer,我想创建一个字符串,它是通过连接大约3000个其他字符串而形成的。 我听说使用这么多的字符串可能效率很低,因为它们位于某种类型的 在不需要后,GC可能不会立即提取它们 这是最好的办法吗- StringBuilder sb = new StringBuilder(""); for(String s : arrayWith3000Strings) { sb.append(s); } 还是应该将所有字符串连接成一个字符串?这绝对是首选StringBuilder的情况 字符串是“不可变的”。任何

我想创建一个字符串,它是通过连接大约3000个其他字符串而形成的。 我听说使用这么多的字符串可能效率很低,因为它们位于某种类型的 在不需要后,GC可能不会立即提取它们

这是最好的办法吗-

StringBuilder sb = new StringBuilder("");

for(String s : arrayWith3000Strings)
{
  sb.append(s);
}

还是应该将所有字符串连接成一个字符串?

这绝对是首选StringBuilder的情况

字符串是“不可变的”。任何修改字符串(包括“追加”)的操作都会创建一个新字符串。使用stringbuilder可以避免这一开销

此链接(众多链接之一)进一步解释:


  • 是的,你的代码很好


    即使使用字符串连接,它也会创建新的
    字符串对象
    ,因为字符串是不可变的。

    StringBuffer
    的性能甚至比
    StringBuilder
    更好,但是
    StringBuffer
    不是线程安全的


    编辑:当然,反之亦然:)

    StringBuilder
    通常在这两种方法中性能最好……因为它没有同步方法的开销。我认为目前不需要多线程,所以字符串缓冲区可能不是最佳选择。显然,它比弦慢得多builder@Breadbutter在周期密集型应用程序中,它的速度很慢(在那里它被使用了数百万次)。@jsn-是的,我将对它进行3000个计数周期。-是的,因此会有很多字符串。如果我用concat来代替呢?有什么不同吗?concat是对字符串的操作,所有对字符串的操作都会生成新字符串,所以这不是处理这个问题的好方法。您的代码是最佳方式。谢谢……是否还有一种图形方式来显示和比较迭代次数=100000的这些方法?可能您可以获得计时,但坦率地说,我不知道有任何图形工具用于此目的。您可以使用
    新建StringBuilder()
    而不是
    新建StringBuilder(“”)
    如果可以使用StringBuilder,请不要使用StringBuffer。几乎没有好的理由起诉StringBuffer。