java - 使用循环最佳实践创建 StringBuilder

标签 java stringbuilder

我想知道这段使用 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() 之类的方法。

如果你看一下thisthis或其他答案,您会看到 javac 编译器对字符串连接进行了额外优化,例如如果常量与 + 运算符连接,则编译器可以将生成的常量插入字节码。

关于java - 使用循环最佳实践创建 StringBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56424159/

相关文章:

java - 接受一个句子并仅打印那些具有素数长度的反向单词

vb.net - 将VB StringBuilder设置为空字符串的合适方法是什么?

java - 如何在传递它的原始方法中访问修改后的 StringBuilder

java - JsonGetter 给出空值

java - 将 xpath 表达式结果转换为 json

java - 仅运行一次 junit 设置方法

Java 三元运算符不起作用?

java - 如何将文件保存在下载目录中?

java - Jitsi SIP Communicator 的安装程序

java - Sonar 提示: use StringBuilder instead of StringBuffer