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

Ond*_*kar 2 java string concatenation string-concatenation

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

for (String object : jsonData) {
    counter++;
    finalJsonDataStr += object;
}
Run Code Online (Sandbox Code Playgroud)

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

我理解一些人的建议StringBuffer,StringBuilder但是这个链接说,它没有性能改进:StringBuilder vs Java中toString()的字符串连接

Fer*_*lva 8

使用String Builder附加到字符串.

连接时,Java实际上是在创建一个带有连接结果的新String.做多次,你无所不在地创造了无数的字符串.

尝试:

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 
Run Code Online (Sandbox Code Playgroud)

备注:

当你做的事情

myString = "hello " + someStringVariable + " World!" + " My name is " + name;
Run Code Online (Sandbox Code Playgroud)

编译器非常智能,可以用一个替换所有这些StringBuilder,例如:

myString = new StringBuilder("hello ")
                      .append(someStringVariable)
                      .append(" World!")
                      .append(" My name is ")
                      .append(name).toString();
Run Code Online (Sandbox Code Playgroud)

但由于某些原因我不知道,当连接发生在循环中时,它不会这样做.