java - 在 Java 中使用 StringBuffer 和 StringBuilder 作为方法返回类型

标签 java string stringbuilder return-type stringbuffer

在 Java 中使用 StringBuilder 或 StringBuffer 作为方法的返回类型是个坏主意吗?我经常从 Java 方法返回 String 作为返回类型,但从来没有返回 StringBuilder 或 StringBuffer,即使我在方法中使用它们完成了操作。

如果建议不要使用 StringBuilder 和 StringBuffer 作为方法返回类型,谁能告诉我吗?若否,原因为何?原因之一可能是这两个是可变的。但是它有什么不同,因为我们经常使用其他派生类型作为可变的方法返回类型。

有人可以用代码解释使用 StringBuffer 和 Builder 作为方法返回类型的缺点(如果有的话)吗?

最佳答案

StringBuffer 是旧的并且被 StringBuilder 取代以提高速度。

返回 StringBuilder 可能是一种糟糕的风格:有时将 StringBuilder 作为参数传递会更好。比较:

[best] 作为参数:

void dump(StringBuilder sb) {
    sb.append(name);
    for (Foo child : children) {
        child.dump(sb);
    }
}

[无问题,低效] 与聚合的不可变值比较:

String toString() {
    return name + left.toString() + right.toString();
}

[丑陋] 与返回可变值的比较:

StringBuilder dump() {
    StringBulder sb = new StringBuilder();
    for (Foo child : children) {
        sb.append(child.dump()); // Inefficient
    }
    return sb;
}

关于java - 在 Java 中使用 StringBuffer 和 StringBuilder 作为方法返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54628163/

相关文章:

java - 通过 JsonPath 中的正则表达式过滤值

java - 如何将C风格的二进制 float 组读入Java?

c - 如何将指针赋值给全局变量?

java - 为什么使用 StringBuffer.reverse 后 equals() 为真?

Java new String 和 new StringBuilder 在堆中的行为

java - 使用 Java Play Framework 2.3.x 在 Controller 中上传单元测试文件

JavaSound 使用流写入音频文件

c - 在另一个字符串中搜索最右边的字符串 - 在 c 中

java - 为什么两个相等的字符串不匹配?

java - 不能用Eclipse做StringBuilder