CharSequence[]
和String[]
之间的区别是什么?
答案 0 :(得分:76)
String实现CharSequence接口。 CharSequence由String实现,但也有CharBuffer,Segment,StringBuffer,StringBuilder。
所以String []和CharSequence []基本相同。但CharSequence是抽象,String是实现。
顺便说一下,'[]'表示对象的数组。所以String[]
是一个字符串数组。而String本身就是一个字符数组。
答案 1 :(得分:31)
CharSequence
表示一系列字符的接口,其中所有类的操作都是通用的。但是,特别是CharSequence
不能保证序列是否可变。因此,您可以拥有一个不可变的实现类,如String
或可变的实现类,如StringBuilder
和StringBuffer
。
此外,CharSequence
不会优化equals()
或hashCode()
方法的通用实现,因此无法保证实现CharSequence
的不同类的对象将会即使它们所持有的基础序列相同,也要相等。所以,给定:
String seq1 = "hello";
StringBuilder seq2 = new StringBuilder("hello");
StringBuffer seq3 = new StringBuffer("hello");
在Java 1.6上使用.equals()
返回false
对这三者进行比较,但是我找不到任何保证,这在将来不会改变(尽管可能不太可能)。
CharSequence[]
和String[]
只是各自类型的数组。
编辑:这样做的实际结果是比较CharSequence
s的相等性,你必须使用他们的toString()
方法并比较结果String
s ,因为如果基础序列相同,则保证返回true
。
答案 2 :(得分:6)
CharSequence是一个接口。 String是一个不可变的字符序列,它实现了CharSequence接口。 CharSequence []和String []分别只是CharSequence和String的数组。
这意味着无论您在哪里看到CharSequence,都可以传递String对象。
答案 3 :(得分:2)
以下是我的图表,其中显示String
如何是实施concrete classes CharSequence
的多个interface之一。
特别是,StringBuilder
通常用作与String
运算符串联+
对象的更快替代方法,其中不需要线程安全。
方括号表示数组。因此,String[]
是String
个对象的数组,CharSequence[]
是一个对象数组,可能是也可能不是String
个对象,但绝对是实现{{1}的对象接口。
有关更多讨论,请参阅my Answer here和my Answer here。
答案 4 :(得分:1)
CharSequence是一个界面。 String是一个实现CharSequence接口的类。这意味着String对象作为CharSequence对象传递。有不同的类实现CharSequence接口。它们都定义了与CharSequence接口提供的方法签名(或抽象方法?)相关的方法。
答案 5 :(得分:1)
String是实现接口CharSequence
的父类。
还有其他一些类也可以实现CharSequence
,例如StringBuffer
,StringBuilder
等。
答案 6 :(得分:0)
CharSequence 表示一组有序字符,并定义检查此字符集的方法。它是界面的,这个接口的一个实现是 String 类。
有关详细信息,请参阅Java API文档。此外,本教程可能会对您有所帮助:http://download.oracle.com/javase/tutorial/