【问题标题】:What is the difference between CharSequence[] and a String[]?CharSequence[] 和 String[] 有什么区别?
【发布时间】:2011-04-05 18:20:46
【问题描述】:

CharSequence[]String[] 有什么区别?

【问题讨论】:

  • 您可能想要添加一个 java 标签。或者有足够代表的人可以做到。
  • 参见Effective Java 2nd Edition,Item 52:通过接口引用对象StringclassCharSequenceinterfaceString 和其他一些实现)。 CharSequence[] 更灵活。也就是说,第 25 条:优先使用列表而不是数组

标签: java


【解决方案1】:

String是实现接口CharSequence的父类。

还有其他类也实现了CharSequence,例如StringBufferStringBuilder等。

【讨论】:

    【解决方案2】:

    这是我的图表,显示了String 是如何实现CharSequence interface 的几个concrete classes 之一。

    特别是,StringBuilder 通常用作连接 String 对象与 + 运算符的更快替代方案,其中不需要线程安全。

    方括号表示数组。因此,String[]String 对象的数组,CharSequence[] 是可能是也可能不是 String 对象但绝对是实现 CharSequence 接口的对象的数组。

    更多讨论请参见my Answer heremy Answer here

    【讨论】:

      【解决方案3】:

      CharSequence 是一个接口。 String 是一个实现 CharSequence 接口的类。这意味着 String 对象作为 CharSequence 对象传递。有不同的类实现 CharSequence 接口。它们都定义了与接口 CharSequence 提供的方法签名(或抽象方法?)相关的方法。

      【讨论】:

        【解决方案4】:

        String 实现了CharSequence 接口。 CharSequence由String实现,也有CharBuffer、Segment、StringBuffer、StringBuilder。

        所以 String[] 和 CharSequence[] 本质上是相同的。但是 CharSequence 是抽象,String 是实现。

        顺便说一下,'[]' 表示对象的数组。所以String[] 是一个字符串数组。而 String 本身就是一个字符数组。

        【讨论】:

        • 在 Java 中,字符串并不完全是一个字符数组。字符存储在一个数组中,但您永远无法确保 String 是不可变的。
        【解决方案5】:

        CharSequence 代表一个字符序列的接口,所有实现它的类都有通用的操作。但是,特别是,CharSequence 不保证序列是否可变。因此,您可以拥有一个不可变的实现类,例如String 或可变的实现类,例如StringBuilderStringBuffer

        此外,CharSequence 没有细化equals()hashCode() 方法的通用实现,因此无法保证实现CharSequence 的不同类的对象将比较相等,即使底层他们持有的顺序是相同的。所以,给定:

        String seq1 = "hello";
        StringBuilder seq2 = new StringBuilder("hello");
        StringBuffer seq3 = new StringBuffer("hello");
        

        在 Java 1.6 上使用 .equals() 返回 false 这三者之间的比较,但我找不到任何保证这在未来不会改变(尽管这可能不太可能)。

        CharSequence[]String[] 只是它们各自类型的数组。

        编辑:实际结果是比较CharSequences 是否相等,你必须使用他们的toString() 方法并比较结果Strings,因为这是保证如果底层序列相同,则返回true

        【讨论】:

          【解决方案6】:

          CharSequence 表示一组有序的字符,并定义了检查该字符集的方法。它是ineinterface,该接口的一种实现是String类。

          请参阅 Java API 文档了解更多信息。另外,本教程可能会对您有所帮助:http://download.oracle.com/javase/tutorial/

          【讨论】:

          • “有序字符集”意味着同一个字符不能出现两次。
          • 我认为他的评论是区分大小写的。他没有说“设置”,是吗?
          【解决方案7】:

          CharSequence 是一个接口。 String 是一个不可变的字符序列,并实现了 CharSequence 接口。 CharSequence[] 和 String[] 分别只是 CharSequence 和 String 的数组。

          这意味着无论你在哪里看到 CharSequence,你都可以传递一个 String 对象。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-11-09
            • 2016-03-26
            • 2021-12-21
            • 2012-05-21
            • 2011-10-25
            • 2019-02-05
            相关资源
            最近更新 更多