何时在 Java 中使用 StringBuilder

2022-08-31 04:42:14

在Java中使用a for string concatention通常应该是更可取的。情况是否总是如此?StringBuilder

我的意思是:创建一个对象,调用方法并最终已经更小,然后用两个字符串的运算符连接现有字符串的开销,还是只建议用于多个(两个)字符串?StringBuilderappend()toString()+

如果有这样的阈值,它依赖于什么(也许是字符串长度,但以哪种方式)?

最后,你会用串联的可读性和简洁性来换取在较小的情况下(如两个,三个或四个字符串)的性能吗?+StringBuilder

过时的Java优化技巧以及Java城市神话中,显式使用常规串联被认为是过时的。StringBuilder


答案 1

如果在循环中使用字符串串联,如下所示,

String s = "";
for (int i = 0; i < 100; i++) {
    s += ", " + i;
}

那么你应该使用(不是)而不是一个,因为它更快,消耗更少的内存。StringBuilderStringBufferString

如果您有一个语句,

String s = "1, " + "2, " + "3, " + "4, " ...;

那么你可以使用s,因为编译器会自动使用。StringStringBuilder


答案 2

拉尔夫的回答是惊人的。我宁愿使用StringBuilder类来构建/装饰String,因为它的使用更像Builder模式。

public String decorateTheString(String orgStr){
            StringBuilder builder = new StringBuilder();
            builder.append(orgStr);
            builder.deleteCharAt(orgStr.length()-1);
            builder.insert(0,builder.hashCode());
            return builder.toString();
}

它可以用作构建字符串的帮助器/构建器,而不是字符串本身。