我在一个循环中连接一个字符串,但它需要很长时间,这是为什么呢?
for (String object : jsonData) {
counter++;
finalJsonDataStr += object;
}
变量 object
是一段 JSON,最多 70 个字符,循环大约 50k 次。
我了解有人建议 StringBuffer
或 StringBuilder
但此链接说,它没有性能改进: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/