【问题标题】:Using StringBuffer and StringBuilder as a method return type in Java在 Java 中使用 StringBuffer 和 StringBuilder 作为方法返回类型
【发布时间】:2019-02-11 10:12:09
【问题描述】:

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

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

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

【问题讨论】:

  • 可变性是一个问题,除非您当然希望允许调用者进行进一步的更改。在我的旅行中,大多数时候使用StringBufferStringBuilder 的目的是在某个时候输出String
  • 所有疑问都清楚检查这个。 stackoverflow.com/questions/834479/…

标签: java string stringbuilder return-type stringbuffer


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    如果你使用返回值继续构造对象的过程,那绝对没问题。另一方面,如果返回值不被修改并且已经被用作表示,那就不好了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2015-07-18
      相关资源
      最近更新 更多