CharSequence是一个字符序列接口,实现了String、StringBuffer、StringBuilder类,所有使用CharSequence字符序列接口类型的程序都看可使用其不同的实现,简单的说,就是子类类型,比如常见的String类型,所以调用时大部分情况下输入的都是String类型数据。
之所以不直接使用String类型作为参数类型,是因为CharSequence接口还有其他的已实现的类,就是前面提到的StringBuffer、StringBuilder,众所周知,String对象不可变,而这两者可变,所以在构造字符串时往往用StringBuffer、StringBuilder, 若在JDK指定的方法中直接用String做参数类型,就无法使用提供的方法,而StringBuffer StringBuiilder转换成String再转换回来会用去很长时间。
另外,需要提到一点,CharSequence是字符序列, 所以它的实现类(之前说的三个)本质上都是通过字符数组实现的。
顺便说说StringBuffer和StringBuilder的区别
这两者都是可变的字符序列,都实现CharSequence接口,不过,StringBuffer是线程安全,StringBuilder是非线程安全。
public final class StringBuilder
extends Object
implements Serializable, CharSequence
public final class StringBuffer
extends Object
implements Serializable, CharSequence
网上说这两个类都继承AbstractStringBuilder,我在jdk1.6、1.7、1.8找过,根本不存在这个类,它们继承的是Object。
如有错误地方或不同意见,请留言,谢谢;
CharSequence接口 请参考:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Ctrl+F查找“CharSequence”即可;
StringBuffer 请参考:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Ctrl+F查找“StringBuffer”即可;
StringBuilder 请参考:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Ctrl+F查找“StringBuilder”即可;