CharSequence和String的区别

          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”即可;


你可能感兴趣的:(java编程思想)