CharSequence[]
和String[]
有什么区别?
String 实现了 CharSequence 接口。CharSequence 除了被 String 实现外,还被 CharBuffer、Segment、StringBuffer 和 StringBuilder 实现。
所以,String[] 和 CharSequence[] 实际上是相同的。但 CharSequence 是抽象层次,而 String 是具体实现。
顺便提一下,'[]' 表示对象的 数组。因此,String[]
是字符串的数组,而 String 本身是字符的数组。
CharSequence
代表一个字符序列的接口,其中包含所有实现它的类共用的操作。但是,CharSequence
并不保证序列是否可变。所以,你可以有一个实现类是不可变的,比如String
,也可以有可变的实现类,比如StringBuilder
和StringBuffer
。
此外,CharSequence
没有细化equals()
或hashCode()
方法的通用实现,因此即使它们持有相同的底层序列,不同类实现CharSequence
的对象之间也不能保证相互比较时相等。例如:
String seq1 = "hello";
StringBuilder seq2 = new StringBuilder("hello");
StringBuffer seq3 = new StringBuffer("hello");
使用.equals()
比较它们三个,Java 1.6版本返回false
,但我找不到任何保证这种情况在未来不会改变的保证(尽管这可能不太可能发生)。
CharSequence[]
和String[]
只是它们各自类型的数组。
编辑:实际影响是为了比较CharSequence
的相等性,您必须使用它们的toString()
方法并比较得到的String
,因为如果底层序列相同,则此操作保证返回true
。
CharSequence是一个接口。String是一个不可变的字符序列并实现了CharSequence接口。CharSequence[]和String[]只是CharSequence和String数组。
这意味着无论您在哪里看到CharSequence,都可以传递一个String对象。
String
是几个实现CharSequence
接口的{{link2:具体类} }中的一个。StringBuilder
通常用作比使用+
运算符将String
对象连接起来更快的替代方法,在不需要线程安全性的情况下。
String[]
是一个String
对象的数组,而CharSequence[]
是一个对象的数组,这些对象可能是String
对象,也可能不是,但肯定实现了CharSequence
接口。CharSequence是一个接口。String是实现CharSequence接口的类。这意味着String对象可以作为CharSequence对象传递。有不同的类实现了CharSequence接口。它们都定义了与接口CharSequence提供的方法签名(或抽象方法?)相关的方法。
String是实现接口CharSequence
的父类。
还有其他类也实现了CharSequence
,例如StringBuffer
、StringBuilder
等。
CharSequence 表示一组有序的字符,并定义了检查此字符集的方法。它是一个接口,而这个接口的一个实现是 String 类。
请参考 Java API 文档以获取更多信息。此外,这个教程可能会对你有所帮助:http://download.oracle.com/javase/tutorial/
String
是一个class
,而CharSequence
是一个interface
(String
和其他一些类实现了该接口)。使用CharSequence[]
更加灵活。但是需要注意,《Effective Java 第二版》第 25 条款建议优先使用列表而不是数组。 - polygenelubricants