我想知道这段使用 StringBuilder 的代码是否最有效
或者它仍然通过将“”与当前项连接来创建大量临时字符串?
如果可以,您能建议更好的代码吗?
public String toString() {
StringBuilder out = new StringBuilder();
for (long item : someListOfNumbers) {
out.append( " " + item);
}
return out.toString();
}
最佳答案
对于这个特定的用例,您可能想要使用 StringJoiner
, 除非您的目标是在结果中有前导空格。
public String toString() {
StringJoiner joiner = new StringJoiner(" ");
someListOfNumbers.forEach(l -> joiner.add(Long.toString(l)));
return joiner.toString();
}
或使用 Collectors.joining()
:
public String toString() {
returns someListOfNumbers.stream()
.map(String::valueOf)
.collect(Collectors.joining(" "));
}
StringBuilder
在构建文本时会更有效率,但可以说上面的代码更具可读性。在使用 StringBuilder
时,绝对应该避免使用 +
运算符,而是使用 append()
之类的方法。
如果你看一下this或 this或其他答案,您会看到 javac
编译器对字符串连接进行了额外优化,例如如果常量与 +
运算符连接,则编译器可以将生成的常量插入字节码。
关于java - 使用循环最佳实践创建 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56424159/