java - 为什么字符串连接需要这么长时间?

标签 java string concatenation string-concatenation

我在一个循环中连接一个字符串,但它需要很长时间,这是为什么呢?

for (String object : jsonData) {
    counter++;
    finalJsonDataStr += object;
}

变量 object 是一段 JSON,最多 70 个字符,循环大约 50k 次。

我了解有人建议 StringBufferStringBuilder 但此链接说,它没有性能改进:StringBuilder vs String concatenation in toString() in Java

最佳答案

使用字符串生成器附加到字符串。

当你连接时,Java 实际上是用连接的结果创建一个新的字符串。 多次这样做,你就白白地创造了无数的字符串。

试试:

StringBuilder sb = new StringBuilder();
for (String object : jsonData) { 
    counter++; 
    sb.append(object.toString());  //this does the concatenation internally
                                   //but is very efficient
}

finalJsonDataStr = sb.toString(); //this gives you back the whole string 

备注:

当你做类似的事情时

myString = "hello " + someStringVariable + " World!" + " My name is " + name;

编译器足够聪明,可以用单个 StringBuilder 替换所有内容,例如:

myString = new StringBuilder("hello ")
                      .append(someStringVariable)
                      .append(" World!")
                      .append(" My name is ")
                      .append(name).toString();

但由于某种我不知道的原因,当连接发生在循环内时它不会这样做。

关于java - 为什么字符串连接需要这么长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879096/

相关文章:

php - 具有不规则空格和制表符的文件按列拆分/分解

带别名的 MySQL Concat(长度)

java - 应该可以仅使用键盘(不需要鼠标)来导航和编辑 NatTables 的过滤器?

string - bash 脚本基本字符串比较

java - 无法将图像插入 Excel 工作表

mysql - 我需要删除最后一个整数之后的所有内容

c++ - C 预处理器替换和连接

excel - 在 excel 中组合两个数字,同时确保第二个数字有两位数

java - 同时配对

java - Orika - 列表到列表的转换