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

时间:2010-08-30 13:12:56

标签: java

CharSequence[]String[]之间的区别是什么?

7 个答案:

答案 0 :(得分:76)

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

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

顺便说一下,'[]'表示对象的数组。所以String[]是一个字符串数组。而String本身就是一个字符数组。

答案 1 :(得分:31)

CharSequence表示一系列字符的接口,其中所有类的操作都是通用的。但是,特别是CharSequence不能保证序列是否可变。因此,您可以拥有一个不可变的实现类,如String或可变的实现类,如StringBuilderStringBuffer

此外,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 heremy Answer here

答案 4 :(得分:1)

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

答案 5 :(得分:1)

String是实现接口CharSequence的父类。

还有其他一些类也可以实现CharSequence,例如StringBufferStringBuilder等。

答案 6 :(得分:0)

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

有关详细信息,请参阅Java API文档。此外,本教程可能会对您有所帮助:http://download.oracle.com/javase/tutorial/