StringBuilder And StringBuffer
特点
StringBuffer / StringBuilder 和 String 一样都可以存储和操作字符串。
但是 String 是字符常量是不可以更改的常量,StringBuffer 则可以进行补充和修改。
①当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
②和 String 类不同的是,StringBuffer 和 StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
③StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
④由于 StringBuilder 相较于 StringBuffer 有速度优势,多数情况下建议使用 StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
性能差别原因:
可以看出,StringBuffer 每次获取 toString 都会直接使用缓存区的 toStringCache 值来构造一个字符串。
而 StringBuilder 则每次都需要复制一次字符数组,再构造一个字符串。
所以,缓存冲这也是对 StringBuffer 的一个优化吧,不过 StringBuffer 的这个toString 方法仍然是同步的。
既然 StringBuffer是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder的性能要远大于StringBuffer。
三种创建形式
1.常规创建
StringBuilder builder = new StringBuilder();
2.在创建的时候添加初始字符串
StringBuilder builder = new StringBuilder("abc");
3.在创建的时候添加初始长度
StringBuilder builder = new StringBuilder(初始长度);
原始数组长度不够时,在传入新字符串时会增加数组长度,并将原来的数据传到新数组中,反复添加遇到这种情况时会对内存造成损耗,为了避免这种情况,可以在创建时提前给StringBuilder对象设置长度:StringBuilder builder = new StringBuilder(初始长度)。