我突然想到一个问题,如果StringBuilder/StringBuffer总是比String好,那为什么我们仍然使用它呢?
我的意思是不应该总是使用StringBuilder/StringBuffer,完全替换String?据说"如果Object值不会改变使用String类,因为String对象是不可变的"但我们也可以使用StringBuilder/StringBuffer并获得更好的性能.
String提供比StringBuilder更多的功能.正如其名称所示,StringBuilder的唯一目的是构建一个String.
String的效率不低于StringBuilder(不知道你在哪里得到它).它实际上更有效率,因为它是不可变的,你可以在不需要防御性副本的情况下分享引用.
最重要的是:性能通常不是主要关注点.更重要的是正确性,可读性,安全性和可维护性.并且使用不可变的String会增加所有这些因素.
如果String比StringBuilder好得多,那为什么我们有一个StringBuilder呢?因为有一个用例,使用StringBuilder比使用String更有效:通过重复附加部分构造String:
String s = "";
for (String part: collection) {
s += part;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码很慢,因为创建和复制了许多临时String对象,然后必须进行GCed.在这种情况下,使用StringBuilder:
StringBuilder builder = new StringBuilder();
for (String part: collection) {
builder.append(part);
}
String s = builder.toString();
Run Code Online (Sandbox Code Playgroud)