01-StringBuffer
1、String内存表示
2、String的弊端
3、StringBuffer类
3.0.为何要学习StringBuffer
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题
3.1.StringBuffer概述
3.2.StringBuffer的常见构造方法[n1]
public StringBuffer() 无参数构造方法[n2]
public StringBuffer(int capacity) 指定容量的字符串缓冲区对象
public StringBuffer(String str) 指定字符串内容的字符串缓存区对象
代码实战:
StringBuffer sb = new StringBuffer();
System.out.println("sb:"+sb); // 空 =》 重写了toString
System.out.println("sb.length:"+sb.length()); // 0
System.out.println("sb.capaticy:"+sb.capacity()); //16
调用 public StringBuffer(int capacity) 测试
publicstaticvoid main(String[] args) {
StringBuffer sb = new StringBuffer(18);
System.out.println(“sb:”+sb);
System.out.println(“sb.length”+sb.length());
System.out.println(“sb.capaticy:”+sb.capacity());
}
观察打印结果:
测试 public StringBuffer(String str) 指定字符串内容的字符串缓存区对象
StringBuffer sb = new StringBuffer(“hello”);
System.out.println(sb); // hello
System.out.println(“sb.length:”+sb.length()); // 5
System.out.println(“sb.capaticy:”+sb.capacity()); // 21
3.3.StringBuffer的常见成员方法
3.3.1.添加功能[n3]
public StringBuffer append(String str)
public StringBuffer insert(intoffset,String str)
代码实战:
publicstaticvoid main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer newSB = sb.append("hello");
System.out.println("sb"+sb);
System.out.println("sb.length"+sb.length());
System.out.println("sb.capaticy"+sb.capacity());
System.out.println("------------------");
System.out.println("newSB"+newSB);
System.out.println("newSB.length"+newSB.length());
System.out.println("newSB.capaticy"+newSB.capacity());
}
观察打印:
进一步验证:
System.out.println(sb==newSB);
观察打印结果:
【开发总结】:StringBuffer的特点:
调用append 方法之后返回本身,所以sb对象在内存中只有一份
既然是可变的,那么说明可以往里面添加很多很多内容
StringBuffer ssb = new StringBuffer();
ssb.append("hello");
ssb.append("a");
ssb.append(true);
ssb.append(1.10);
System.out.println("ssb:"+ssb);
System.out.println("ssb.capaticy:"+ssb.capacity());
System.out.println("ssb.length:"+ssb.length());
观察打印结果:
理论值[n4] 和实际值[n5]
public StringBuffer insert(intoffset,String str)
在指定索引位置 追加内存到字符串缓冲区
代码实战:
publicstaticvoid main(String[] args){
StringBuffer ssb = new StringBuffer();
ssb.append("hello");
System.out.println("ssb:"+ssb);
ssb.insert(4, "k");
System.out.println("ssb:"+ssb);
}
3.3.2.删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,intend)
3.3.3.替换功能
public StringBuffer replace(int start,intend,String str)
3.3.4.反转功能
public StringBuffer reverse()
3.3.5.截取功能[n6]
public String substring(int start)
public String substring(int start,int end)
4.String 和StringBuffer的相互转换
4.1.为何要转换
要使用某个类的方法
4.2.转换方式
4.2.1.String =>StringBuffer
以下错误代码:
// 从String 转换到StringBuffer
String str = "helloworld";
StringBuffer sb = str;
StringBuffer sb2 = "hello";
1.使用构造函数
public StringBuffer(String str)
2.使用append方法
String str = "hello";
StringBuffer sb = new StringBuffer();
sb.append(str);
4.2.2.StringBuffer => String
1.使用String的构造函数,接收的参数类型是 StringBuffer
2.调用StringBuffer的toString()方法
5.StringBuffer练习题
把数组拼接成一个字符串
把字符串反转
判断一个字符串是否是对称字符串
例如"abc"不是对称字符串,“aba”、“abba”、“aaa”、"mnanm"是对称字符串
[n1]讲解构造方法的区别的时候,可以把长度功能和容量功能先解释一下。
长度:实际值
容量:理论值
[n2]默认长度是16
[n3]往字符串缓冲区中添加字符串内容
StringBuffer中有很多重载方法,所以可以追加任意内容进去
[n4]capaticy
[n5]length
• [n6]返回值类型是String类型,本身没有发生改变
微信扫一扫
关注该公众号