一.
这个对象以后开发中很常用,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); } }