String系列框架图:
一、CharSequence
public interface CharSequence {}
CharSequence是一个接口,表示char值的一个可读序列。此接口对许多不同种类的char序列提供统一的自读访问。此接口不修改该equals和hashCode方法的常规协定,因此,通常未定义比较实现 CharSequence 的两个对象的结果。正因如此,不推荐使用任意的CharSequence实例作为Set集合的元素或者Map对象的键,这是CharSequence源码中明确说明的。
二、Comparable
public interface Comparable<T> {}
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。实现此接口的对象可用做SortedMap对象的键或SortedSet对象的元素,而不需要指定Comparator实例。
三、Appendable
public interface Appendable {}
Appendable接口的实现类的对象能够被添加 char 序列和值。如果某个类的实例打算接收取自 java.util.Formatter 的格式化输出,那么该类必须实现 Appendable 接口。 要添加的字符应该是有效的 Unicode 字符。 Appendable 对于多线程访问而言没必要是安全的。线程安全由扩展和实现此接口的类负责。
四、AbstractStringBuilder
abstract class AbstractStringBuilder implements Appendable, CharSequence {}
AbstractStringBuilder实现了CharSequence和Appendable接口,因此AbstractStringBuilder是一个可变的字符序列。在任意时间点,它包含特定的字符序列,但是序列的内容和长度都可以通过调用特定的方法进行修改。
StringBuffer和StringBuilder都是AbstractStringBuilder的子类,正是AbstractStringBuilder实现了可变字符序列需要的方法,使得StringBuffer和StringBuilder的实现变得更加简单。