我突然想到一个问题,如果 StringBuilder/StringBuffer 总是比 String 好,那我们为什么还要使用它?
我的意思是不应该总是使用 StringBuilder/StringBuffer 来完全替换 String 吗?据说“如果 Object 值不会改变,请使用 String 类,因为 String 对象是不可变的”,但我们也可以使用 StringBuilder/StringBuffer 并获得更好的性能。
最佳答案
String 比 StringBuilder 提供更多的功能。正如其名称所暗示的,StringBuilder 的唯一目的是构建一个字符串。
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();
关于java - 什么时候在 stringbuilder/stringbuffer 上使用 string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29642145/