20

一个String 是一个 CharSequence。Java 库中的许多方法都接受CharSequence,因此它们的操作更普遍。一些类有一个String方法(例如,Writer.write(String)),并且还Appendable使用等效的CharSequence方法(例如,Writer.append(CharSequence))实现。

如果我正在编写一个委托给这样一个类的类,并且需要一些文本输入,我可以选择该输入是 aString或 a CharSequence。通过为客户提供更多选择,选择后者使课程更加灵活。但我没有看到太多这样做的代码:文本参数几乎总是 aString而不是 a CharSequence。使用有缺点CharSequence吗?是否有性能影响?或者仅仅是程序员的惯性或无知导致使用String而不是CharSequence

比较

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(String text) {
      writer.write("<!-- ");
      writer.write(text);
      writer.write(" -->");
   }
}

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(CharSequence text) {
      writer.write("<!-- ");
      writer.append(text);
      writer.write(" -->");
   }
}
4

1 回答 1

14

引用CharSequenceJavadoc:

这个接口没有细化equalsandhashCode方法的一般契约。CharSequence因此,测试两个实现相等的对象的结果通常是未定义的。每个对象都可以由不同的类实现,并且不能保证每个类都能够测试其实例与其他类的实例是否相等。因此,将任意CharSequence实例用作集合中的元素或映射中的键是不合适的。

因此,IMO 在使用 CharSequnce 作为 String 的替代品之前,我们必须三思而后行。

于 2011-12-09T12:17:47.090 回答