定义:
一个用来高效拼接字符串的类。但线程不安全,底层和String一样都是char[] 数组。默认是16位,可以扩容。扩容的方式是原来的*2+2.
所属包:
java.lang;
构造方法:
有参构造(传入字符串String str)与无参构造
public StringBuilder();
无参构造
StringBuilder a = new StringBuilder();
无参构造创建对象
public StringBuilder(String str);
有参构造
StringBuilder b = new StringBuilder("dd");
有参构造创建对象
StringBuilder中的一些常用方法:
StringBuilder append(Object obj);:进行拼接操作
StringBuilder b = new StringBuilder();
用无参构造创建StringBuilder的对象
b.append("aa");
b.append("bb");
b.append("cc");
拼接"aa","bb","cc"
System.out.println(b);
输出结果为:
String toString:将StringBuilder对象转换为String对象
StringBuilder b = new StringBuilder("dd");
用无参构造创建StringBuilder的对象
b.append("aa");
b.append("bb");
b.append("cc");
在"dd"上拼接"aa","bb","cc"
System.out.println(b);
String str = b.toString();
将当前StringBuilder对象转换为String对象
System.out.println("----------");
System.out.println(str);
输出结果 :
int length();查看对象的长度
StringBuilder b = new StringBuilder();
用无参构造创建StringBuilder的对象
b.append("aa");
b.append("bb");
b.append("cc");
拼接"aa","bb","cc"
System.out.println(b);
int len = b.length();
查看对象的长度
System.out.println("----------");
System.out.println(len);
输出结果:
StringBuilder delete(int start,int end);清空从start位置开始到end位置结束的数据
StringBuilder b = new StringBuilder();
用无参构造创建StringBuilder的对象
b.append("aa");
b.append("bb");
b.append("cc");
拼接"aa","bb","cc"
System.out.println(b);
int len = b.length();
查看对象的长度
System.out.println("----------");
System.out.println(len);
删除索引值0-2的元素
b.delete(0, 2);
System.out.println("----------");
System.out.println(b);
输出结果:
StringBuilder reverse();把元素翻转
StringBuilder b = new StringBuilder("dd");
用无参构造创建StringBuilder的对象
b.append("aa");
b.append("bb");
b.append("cc");
在"dd"上拼接"aa","bb","cc"
System.out.println(b);
System.out.println(“--------------”);
b.reverse();
System.out.println(b);
输出结果
String中的“+”也可以进行字符串的拼接,既然如此为什么又要有StringBuilder方法?
首先,String的底层是StringBuilder,进行“+”操作时,会创建一个StringBuilder对象,用append去进行拼接,再用toString转化成String。
也可以理解为,创建一个String类型的对象
String str = “aaa”;
这样写的话是将它存到了字符串常量池中,如果要用“+”来进行拼接操作。
String str = “aaa”;
str = str+“bbb”;
因为String不会被改变,他会首先在常量池中寻找,是否有aaabbb存在,如果存在,则直接将新建的对象地址值直接指向该块区域,如果不存在,则重新保存一个aaabbb,但此时str的地址值已经指向了aaabbb。
总之每进行一次单等赋值操作,底层就会新开一个空间。比较浪费内存。
除非这么写
String str = "aa";
str = str+"cc"+"dd"+"ee";
如果这么写,底层只创建了一个StringBuilder类型的对象