CharSequence 和String 之间有什么区别?
CharSequence[]
和String[]
什么区别?
string实现CharSequence接口。 CharSequence是由String实现的,也是CharBuffer,Segment,StringBuffer,StringBuilder。
所以一个String []和一个CharSequence []实质上是一样的。 但CharSequence是抽象的,String是实现。
顺便说一下,'[]'表示一个对象数组 。 所以String[]
是一个string数组。 而String本身就是一个字符数组。
CharSequence
表示一个字符序列的接口,所有实现它的类都有相同的操作。 但是, CharSequence
并不保证序列是否可变。 所以,你可以有一个不可变的实现类,比如StringBuilder
和StringBuffer
。
另外, CharSequence
并没有细化equals()
或者hashCode()
方法的通用实现,所以不能保证实现CharSequence
的不同类的对象会比较相同,即使它们持有的底层序列是相同的。 所以,给出:
String seq1 = "hello"; StringBuilder seq2 = new StringBuilder("hello"); StringBuffer seq3 = new StringBuffer("hello");
这三个使用.equals()
之间的比较Java 1.6上返回false
,但我不能find任何保证,这将不会改变(虽然这可能是相当不可能的)。
而CharSequence[]
和String[]
只是它们各自types的数组。
编辑 :这个的实际结果是比较CharSequence
的平等,你必须使用他们的toString()
方法,并比较结果的String
s,因为这是保证返回true
如果底层序列是相同的。
CharSequence是一个接口。 string是不可变的字符序列,并实现CharSequence接口。 CharSequence []和String []只是CharSequence和String的数组。
这意味着无论你在哪里看到CharSequence,都可以传递一个String对象。
CharSequence是一个接口。 string是一个实现CharSequence接口的类。 这意味着一个String对象作为CharSequence对象传递。 有不同的类实现CharSequence接口。 它们都定义了与接口CharSequence提供的方法签名(或抽象方法?)相关的方法。
CharSequence表示一组有序的字符,并定义检查这个字符集的方法。 这是接口,这个接口的一个实现是String类。
有关更多信息,请参阅Java API文档。 另外,本教程可能会帮助您: http : //download.oracle.com/javase/tutorial/
这里是我的图显示如何String
是实现CharSequence
接口的几个具体类之一。
特别是, StringBuilder
通常被用作连接String
对象和+
运算符的更快的替代方法,在这里不需要线程安全。
方括号表示一个数组。 所以, String[]
是一个String
对象的数组,而CharSequence[]
是一个对象数组,它可以是也可以不是String
对象,但肯定是实现CharSequence
接口的对象。
在这里看到我的答案和我的答案在这里进行更多的讨论。