一.
这个对象以后开发中很常用,Buffer是缓冲区的意思,字符串缓冲区对象。
在java.lang包中,有StringBuffer类。缓冲区就是容器,对数据进行了临时存储,StringBuffer做就得就是这个事情。
之前学习的数组也是个容器,它也能存储东西,区别在哪里?
数组是固定长度的,StringBuffer是可变长度的。容器知识点要重点掌握,以后数据多了要存储起来使用。
数组定义完了之后,只能往里面存储同一类数据,StringBuffer可以存储不同类型数据,
append就是添加,不同的append方法很多,这里只是截图了一种。它会在缓冲区里面进行数据追加,byte和short类型的数据不可以添加(没什么事儿,short和byte类型,int都可以接收)。
添加方法append返回类型还是StringBuffer,返回的还是本类对象。
在演示添加数据的方法之前,先要建立一个缓冲区。
这个缓冲区一new出来,就能够存储16个字符。
缓冲区没啥,里面还是数组,只不过它把数组给封装了。对外提供这么一个方法,16代表着数组的长度。
想通过sb建立的s1,它们两者之间有什么联系。DOS结果显示都为4。
sb的输出结果是直接将缓冲区里面的内容变成了字符串。接着又进行sb==s1?结果显示为true。
有一个容器,把4放置在里面,返回来的依旧是容器。
通过上面截图中的方式,貌似可以不同建立s1就一样操作,但是我的疑问是,需要toString方法么?
这个截图的结果是4true,打印出来的就是一个字符串。
缓冲区是用来存储字符串的,存储结束了要想用其中的数据,最终还要把它变成字符串才能用。缓冲区是用来存储数据的,存储完了,就要进行整合,变成一个大的数据,接着变成字符串才能继续使用。
缓冲区存入数据后,全都集中在一起。而数组中,是分开的。
sb.append(4)运算完了后,返回的是当前缓冲区对象,一个对象调用完方法之后,还是对象。下图就是方法调用链
这些通过append方法追加的数据,都是在尾部形成字符串的,如果想到添加到中间来怎么办?
采用insert方法,参数列表中有两个参数,插入的位置和插入的数据。
结果输出的是4hahafalse,4的位置是0,。想在哪儿放置就在哪儿放置,这就是缓冲区的特点。
字符串一旦确定就不能修改了,只有通过缓冲区可以进行变化。
DOS结果为abqqce,2的位置原先是c,现在变为qq了。
上面说了一些字符缓冲区的特点和里面所涉及的一些动作。
package stringbuffer.demo;
public class StringBufferDemo {
public static void main(String[] args) {
/*
* StringBuffer:就是字符串缓冲区
* 用于存储数据的容器。
* 特点
* 1.长度是可变的
* 2.可以存储不同类型的数据。
* 3.最终要转成字符串进行使用。
* 4.可以对字符串进行修改
*
* 既然是一个容器,应该具备什么功能呢?
* 1.添加:
* StringBuffer append(data):
* StringBuffer insert(index,data);
* 2.删除:
* StringBuffer delete(start,end):包含头,不包含尾
* StringBuffer deleteCharAt(int index):删除指定位置的元素。
* 3.查找:
* char charAt(index);
* int indexof(string);
* int lastIndexof(string);
* 4.修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);
* 5.增删改查 c(create) U(update) R(read) D(dete)
*
*
* StringBuffer();
* 线程安全。
*
*
*
*
*
*
*/
// bufferMethodDemo();
bufferMethodDemo2();
}
public static void bufferMethodDemo2() {
StringBuffer sb = new StringBuffer("abcdefgh");
sb.delete(1, 3);//删除元素,包含头,不包含尾
//清空缓冲区
// sb.delete(0, sb.length());
//sb = new StringBuffer//用这种方法清空内存,不合适,浪费内存
System.out.println(sb);//adefgh
sb.deleteCharAt(0);
System.out.println(sb);//defgh
sb.replace(0, 2, "gao");
System.out.println(sb);//gaofgh
sb.setCharAt(0, 'h');
System.out.println(sb);//haofgh
}
public static void bufferMethodDemo() {
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();
// StringBuffer s1 = sb.append(4);
// System.out.println(sb==s1);//true
sb.append(4).append(false).append("haha");
sb.insert(2, "搞");
// sb.append(true);
//缓冲区是存储数据的。用的话还需要转成字符串。
System.out.println(sb);
}
}