当前位置: 首页 > 面试题库 >

在API的CharSequence和String之间选择

锺离珂
2023-03-14
问题内容

AStringis-aCharSequence。Java库中有许多方法可以接受,CharSequence因此它们的操作范围更广。某些类具有String方法(例如Writer.write(String)),并且还Appendable使用等效CharSequence方法(例如Writer.append(CharSequence))实现。

如果我正在编写一个委托给此类的类,并且需要一些文本输入,则可以将输入选择为a String或a
CharSequence。通过为客户提供更多选择,选择后一种将使类更灵活。但是我看不到有太多这样做的代码:文本参数几乎总是a String而不是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(" -->");
   }
}

问题答案:

引用CharSequenceJavadoc:

此接口不会完善equalshashCode方法的常规协定。因此,测试两个实现CharSequence相等的对象的结果通常是不确定的。每个对象都可以由不同的类实现,并且不能保证每个类都能够测试其实例与另一个实例的相等性。因此,将任意CharSequence实例用作集合中的元素或用作映射中的键是不合适的。

因此,在使用CharSequnce代替String之前,IMO我们必须三思。



 类似资料:
  • 描述 (Description) java.util.regex.Pattern.split(CharSequence input)方法将给定的输入序列围绕此模式的匹配进行拆分。 声明 (Declaration) 以下是java.util.regex.Pattern.split(CharSequence input)方法的声明。 public String[] split(CharSequence

  • 问题内容: 在Android中进行编程时,大多数文本值应在中。 这是为什么?好处是什么?使用over 的主要影响是什么? 主要区别是什么?在使用它们并将它们从一个转换到另一个时会遇到什么问题? 问题答案: 字符串是CharSequences,因此您可以只使用String而不用担心。Android只是通过允许您还指定其他CharSequence对象(例如StringBuffers)来尝试提供帮助。

  • 问题内容: 我读了以前的这篇文章。除了实现和那是一个字符序列的事实之外,谁能说出和String 之间的确切区别是什么?例如: 当“你好”被分配到会发生什么,再而三? 问题答案: 一般差异 除了以外,还有几个类可以实现接口。其中有 用于可变长度的字符序列,可以对其进行修改 用于固定长度的低级字符序列,可以对其进行修改 任何接受a的方法都可以在所有这些方法上同样有效地工作。任何仅接受a的方法都将需要转

  • 问题内容: 最近,我一直在Golang中努力处理SQL NULL值。在尝试使用和未能成功解组JSON对象后。 使用字符串指针的解决方案似乎可以与Decode()和nil值完美配合。那么和之间有什么区别?只是零检查吗? 问题答案: SQL具有与Golang不同的空值。 如果您查看的定义,那么您将获得: 如您所见,这是一种表示来自SQL的空字符串(对应于“ NULL”)的方法。另一方面,nil 是指向

  • 描述 (Description) java.util.regex.Pattern.split(CharSequence input, int limit)方法将给定的输入序列分割为此模式的匹配。 声明 (Declaration) 以下是java.util.regex.Pattern.split(CharSequence input, int limit)方法的声明。 public String[]

  • 问题内容: 声明 Array 和 Dictionary的 更好方法,我都使用了: 对我来说,编码方面的速度非常快,但实际上两者在编译器和性能方面有何不同,我们应该遵循哪一个? 问题答案: 从Swift上的iOS开发者库… Swift数组的类型完整写为Array ,其中Element是允许数组存储的值的类型。您还可以将简写形式的数组类型写为[Element]。尽管 这两种形式在功能上是相同的 ,但