目录
为什么说StringBuilder/StringBuffer效率比String高?
为什么说StringBuilder是线程不安全的 StringBuffer是线程安全的?
常见疑问
为什么说StringBuilder是一个可变的字符序列?
StringBuilder被实例化的话会预先分配一个长度为16的char数组
如果新增字符的的话会判断新增字符的长度与源字符串的长度并与源长度比较只有比源长度大时才会去扩容,然后新建数组,并将新建的数组复制至全局char[]
从而实现可变扩容
为什么说StringBuilder/StringBuffer效率比String高?
因为StringBuffer/Builder是动态扩容的不需要每次都new 新的对象,但是String是静态扩容的(初始化时便固定了数组的长度16),每次增加扩容都需要new 一个新的对象,同时变换指针的位置(老-》新的)
为什么说StringBuilder是线程不安全的 StringBuffer是线程安全的?
因为StringBuffer是使用了synchronized关键字,保证了同一时间只能有一个线程访问,多线程访问也不会产生异常,所以它是安全的,反之StringBuilder没有使用ynchronized关键字
方法清单
StringBuilder方法
builder.length();
builder.append(str); // 追加数据;
builder.append(c); // 追加数据;
builder.insert(offset, str); // 向指定位置插入数据;
builder.insert(offset, c);
builder.setCharAt(i, c);
builder.deleteCharAt(i); // 删除指定位置的数据;
builder.delete(beginIdx, endIndex);; // 删除指定范围的数据[startIdx, endIdx-1];
builder.toString(); //将对象中的数据以字符串的形式返回;
builder.reverse(); // 将对象中的数据反转;
StringBuffer方法
与上面的StringBuilder的方法一样