使用 StringBuffer 和 StringBuilder 作为方法 return 输入 Java

Using StringBuffer and StringBuilder as a method return type in Java

在 Java 中使用 StringBuilder 或 StringBuffer 作为方法的 return 类型是个坏主意吗?我经常从 Java 方法中 return 将 String 作为 return 类型编辑,但从来没有使用 StringBuilder 或 StringBuffer ,即使我在方法中使用它们进行了操作。

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

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

StringBuffer 是旧的,被 StringBuilder 代替了速度。

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

[最佳]作为参数:

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;
}

构建器模式的思想是将构造与表示分开。

如果您使用return值继续构建对象的过程,那绝对没问题。另一方面,如果 return 值不被修改并且已经被用作表示是不好的。

这些 类 没有什么特别的,它们只是代表一个可变的字符序列。您需要做的一件事是在构造和表示之间划清界限。