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

68

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


你可能想要添加一个Java标签。或者有足够声望的人可以这样做。 - codinguser
5
请参考《Effective Java 第二版》第 52 条款:“通过接口引用对象”。String 是一个 class,而 CharSequence 是一个 interfaceString 和其他一些类实现了该接口)。使用 CharSequence[] 更加灵活。但是需要注意,《Effective Java 第二版》第 25 条款建议优先使用列表而不是数组。 - polygenelubricants
1
可能是Java中的CharSequence VS String?的重复问题。 - Basil Bourque
7个回答

81

String 实现了 CharSequence 接口。CharSequence 除了被 String 实现外,还被 CharBuffer、Segment、StringBuffer 和 StringBuilder 实现。

所以,String[] 和 CharSequence[] 实际上是相同的。但 CharSequence 是抽象层次,而 String 是具体实现。

顺便提一下,'[]' 表示对象的 数组。因此,String[] 是字符串的数组,而 String 本身是字符的数组。


在Java中,String并不完全是一个字符数组。字符被存储在一个数组中,但你永远无法访问以确保String是不可变的。 - Matej 'Yin' Gagyi

32

CharSequence代表一个字符序列的接口,其中包含所有实现它的类共用的操作。但是,CharSequence并不保证序列是否可变。所以,你可以有一个实现类是不可变的,比如String,也可以有可变的实现类,比如StringBuilderStringBuffer

此外,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


8

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

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


6
这是我的图表,展示了String是几个实现CharSequence接口的{{link2:具体类} }中的一个。
特别地,StringBuilder通常用作比使用+运算符将String对象连接起来更快的替代方法,在不需要线程安全性的情况下。

方括号表示数组。因此,String[]是一个String对象的数组,而CharSequence[]是一个对象的数组,这些对象可能是String对象,也可能不是,但肯定实现了CharSequence接口。
请参见这里这里以获取更多讨论。

1

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


1

String是实现接口CharSequence的父类。

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


0

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

请参考 Java API 文档以获取更多信息。此外,这个教程可能会对你有所帮助:http://download.oracle.com/javase/tutorial/


4
“有序字符集”意味着同一字符不能出现两次。 - Michael Borgwardt
2
我认为他的评论是区分大小写的。他没有说“Set”,对吧? - Igor Soudakevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接