CharSequence []和String []之间有什么区别?

Bri*_*ier 63 java

CharSequence[]和之间有什么区别String[]

Thi*_*Roy 76

String实现CharSequence接口.CharSequence由String实现,但也有CharBuffer,Segment,StringBuffer,StringBuilder.

所以String []和CharSequence []基本相同.但CharSequence是抽象,String是实现.

顺便说一下,'[]'表示一个对象数组.String[]字符串数组也是如此.而String本身就是一个字符数组.


Chi*_*chi 31

CharSequence表示一系列字符的接口,具有实现它的所有类通用的操作.但是,特别是,CharSequence不保证序列是否可变.所以,你可以有一个不变的实现类,像String或可变的,如StringBuilderStringBuffer.

此外,CharSequence不会细化equals()hashCode()方法的通用实现,因此无法保证实现的不同类的对象CharSequence即使它们所持有的基础序列相同也会相等.所以,给定:

String seq1 = "hello";
StringBuilder seq2 = new StringBuilder("hello");
StringBuffer seq3 = new StringBuffer("hello");
Run Code Online (Sandbox Code Playgroud)

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

CharSequence[]String[]只是各自类型的数组.

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


cod*_*ser 6

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

这意味着无论您在哪里看到CharSequence,都可以传递String对象.


Bas*_*que 5

这是我的图表,显示了如何实现接口String的几个具体类之一CharSequence

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

方括号表示数组。所以,String[]是一个String对象数组,是一个对象CharSequence[]数组,可能是也可能不是String对象,但肯定是实现CharSequence接口的对象。

有关更多讨论,请参阅此处的我的答案此处的我的答案