在Java中连接字符串的最有效方法

Der*_*ble 4 java stringbuffer

我的印象是StringBuffer是连接字符串的最快方法.但我看到这篇 stackoverflow的帖子说concat是最快的方法.我在Java 1.5,1.6和1.7中尝试了给出的2个例子我从未得到他们得到的结果.我的结果几乎就像这样

  1. 有人可以解释一下我在这里不明白的地方吗?什么是真的
  2. 当多个字符串出现时,方法会对两个字符串有效吗?(如连接4变量S1,S2,S3,S4)

Mat*_*ans 7

String.concat+如果你连接两个字符串,它比运算符更快......虽然这可以在任何时候修复,甚至可以在java 8中修复,据我所知.

你引用的第一篇文章中遗漏的是作者正在连接两个字符串,而快速方法是新字符数组的大小预先计算为str1.length()+ str2.length( ),因此底层字符数组只需要分配一次.

使用StringBuilder()而不指定最终大小(这也是+内部工作方式)通常需要对底层数组进行更多分配和复制.

如果你需要将一堆字符串连接在一起,那么你应该使用StringBuilder.如果它是实用的,那么预先计算最终大小,以便底层数组只需要分配一次.


小智 6

我从别人的回答中了解到的内容如下:

如果需要线程安全,请使用StringBuffer

如果不需要线程安全:

如果事先已知字符串,并且由于某些原因需要多次运行相同的代码,请使用“+”,因为编译器将在编译时本身优化和处理它。

如果只需要连接两个字符串,请使用 concat(),因为它不需要创建 StringBuilder/StringBuffer 对象。致谢@nickb

如果需要连接多个字符串,请使用 StringBuilder。