繁体   English   中英

什么时候在stringbuilder / stringbuffer上使用string?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM