图1 StringBuilder和StringBuffer的继承关系
(1) StringBuilder和StringBuffer都由AbstractStringBuilder类继承而来。
(2) AbstractStringBuilder底层以一个字符数组value数据,用一个整型数count表示字符的长度。
value会在插入字符时自动增长,value.length = value.length * 2 + 2;
AbstractStringBuilder在处理字符数组的过程中,大量使用了System.arraycopy()和Arrays.copyOf()方法。
(3) AbstractStringBuilder基本上实现了所有的增删查改操作。StringBuilder和StringBuffer只是简单继承了这些方法。
(4) StringBuffer和StringBuilder的区别:
StringBuffer在所有的方法上增加了synchronized关键字,所以是线程安全的。
StringBuffer的toString()方法会缓存一个要返回的字节数组。