![](/img/trans.png)
[英]When would a compiler choose StringBuffer over StringBuilder for String concatenation
[英]when to use string over stringbuilder/stringbuffer?
我突然想到一个问题,如果StringBuilder / StringBuffer总是比String好,那为什么还要使用它呢?
我的意思是不应该始终使用StringBuilder / StringBuffer来完全替换String吗? 有人说“如果由于String对象是不可变的,则Object值不会改变,请使用String Class”,但是我们也可以使用StringBuilder / StringBuffer以获得更好的性能。
字符串比StringBuilder提供更多的功能。 顾名思义,StringBuilder的唯一目的是构建一个String。
一个String的效率不比一个StringBuilder的效率低(不知道从哪里得到的)。 实际上,它效率更高,因为它是不可变的,因此您可以安全地共享引用而无需防御性副本。
最重要的是:无论如何,性能通常不是主要的考虑因素。 更重要的是正确性,可读性,安全性,可维护性。 使用不可变的字符串会增加所有这些因素。
如果String比StringBuilder好得多,那么为什么要有StringBuilder? 因为在一个用例中,使用StringBuilder比使用String效率更高:通过重复添加部分来构造String:
String s = "";
for (String part: collection) {
s += part;
}
上面的代码很慢,因为创建并复制了许多临时String对象,然后必须对其进行GC处理。 在这种情况下,请使用StringBuilder:
StringBuilder builder = new StringBuilder();
for (String part: collection) {
builder.append(part);
}
String s = builder.toString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.