当我们不断的对字符串进行重复多次的时候,是十分消耗内存的
String st = "a";
for (int i=0; i<1000000; i++){
st += "b";
}
它会不断地进行产生新对对象 ,这样会使计算机的性能十分浪费。
这时 我们用到了StringBuilder类
格式如下
StringBuilder sb = new StringBuilder();
他其中有个方法:
public StringBuilder append(任意类型)
这个方法StringBuilder专有的 是添加数据,并返回自身对象
因为它是返回自身对象的,所以不会创造新的对象,并且可以进行链式编程
sb.append("123").append("abc");
之后它还有跟String类似的api
sb.insert(0,"s"); //在指定为位置插入字符串
System.out.println(sb);//s123abc
sb.setCharAt(5,'m'); //修改指定位置的字符串;
System.out.println(sb);//s123amc
sb.deleteCharAt(5); //删除指定位置的字符
System.out.println(sb); //s123ac
sb.delete(5,sb.length()); //删除指定位置字符串
System.out.println(sb); //s123a
sb.reverse(); //反转功能
System.out.println(sb); //a321s
StringBuilder的容量
用无参数构造器初始容量为16 用有参数构造器初始容量 16+构造器参数的长度 扩容原理: 什么时候扩容:当添加进来的字符串长度加上原来储存的字符串的长度大于初始容量
StringBuilder sb = new StringBuilder("abc");
//调用无参数构造器,通过spuer关键字,找到父类,创建了一个char[],长度为16
int si = sb.capacity(); //初始容量 16
扩容之后的容量是多少:扩容之后的长度是原来的容量多大2倍+2,如果这次扩容之后的容量不足以存储本次添加的字符串,那么扩容之后的长度就是这次 添加的字符长度+原来的容量