package cn.jason.stringbuffer.demo;
public class StringBufferDemo {
public static void main(String[] args) {
/*
* stringbuffer:字符串缓冲区 作为一个字符容器 特点:
* 1.长度可以变化
* 2.可以对内容通过指定方法进行修改
* 3.容器对象一般都会具备对容器中的元素进行操作的功能。增删查改
* 4.缓冲区中可以存储不同类型的数据。啥对象都能存
* 5.最后缓冲区存储完的数据都会变成字符串
*/
String str = "a"+4+"c";
//在内存中的过程。1.创建一个字符串缓冲区容器。2.将要组成字符串的元素先存储起来。3.最后将缓冲区填充数据变成字符串
str=new StringBuffer().append("a").append(4).toString();
//这就是String str 形成的过程
}
* stringbuffer:字符串缓冲区 作为一个字符容器 特点:
* 1.长度可以变化
* 2.可以对内容通过指定方法进行修改
* 3.容器对象一般都会具备对容器中的元素进行操作的功能。增删查改
* 4.缓冲区中可以存储不同类型的数据。啥对象都能存
* 5.最后缓冲区存储完的数据都会变成字符串
*/
String str = "a"+4+"c";
//在内存中的过程。1.创建一个字符串缓冲区容器。2.将要组成字符串的元素先存储起来。3.最后将缓冲区填充数据变成字符串
str=new StringBuffer().append("a").append(4).toString();
//这就是String str 形成的过程
}
}
package cn.jason.stringbuffer.demo;
public class StringBufferDemo2 {
public static void main(String[] args) {
/*
* StringBuffer
* 缓冲区可以对数据进行临时存储
*
* 了解缓冲区的常见方法
* 添加元素:
* StringBuffer append(各种类型的数据);追加..就是从最后添加
* StringBuffer insert(index,各种类型的数据);指定位置添加
*
*
*/
//1.创建一个缓冲区
StringBuffer sb = new StringBuffer();
//2.追加一个字符串
sb.append("abc");
System.out.println(sb);// ! pringln(),这个方法会将所有要打印的数据先转成字符串(String)再输出,
//对于对象会自动调用toString方法。
//String s = sb; 这样是错误的,因为sb是StringBuffer类型,不能自动转换
//String s = sb.toString() sb就需要toString手动转换成String类型
//3.插入一个boolean值,true
sb.insert(1, true);
System.out.println(sb);
//4.删除字符
// sb.delete(1, 4); //有关删除的方法的词汇就两个:delete,remove
//所有控制头尾角标的方法,都遵循(包含头,不包含尾)
//5.修改字符
sb.replace(1, 4, "xyxyxyxyxy");//把1~4角标的替换
System.out.println(sb);
//缓冲区设置长度,只显示缓冲区内的字符
sb.setLength(20);
//反转,颠倒
sb.reverse();
/*
* 字符串缓冲区中维护了一个“可变长度的数组”
* 解释:其实就是超出内部数组长度后,新建数组长度要是原数组的1.x倍数
* 并将原数组的数据复制到新数组中,并将新的元素也添加到新数组中
*
*/
}
* StringBuffer
* 缓冲区可以对数据进行临时存储
*
* 了解缓冲区的常见方法
* 添加元素:
* StringBuffer append(各种类型的数据);追加..就是从最后添加
* StringBuffer insert(index,各种类型的数据);指定位置添加
*
*
*/
//1.创建一个缓冲区
StringBuffer sb = new StringBuffer();
//2.追加一个字符串
sb.append("abc");
System.out.println(sb);// ! pringln(),这个方法会将所有要打印的数据先转成字符串(String)再输出,
//对于对象会自动调用toString方法。
//String s = sb; 这样是错误的,因为sb是StringBuffer类型,不能自动转换
//String s = sb.toString() sb就需要toString手动转换成String类型
//3.插入一个boolean值,true
sb.insert(1, true);
System.out.println(sb);
//4.删除字符
// sb.delete(1, 4); //有关删除的方法的词汇就两个:delete,remove
//所有控制头尾角标的方法,都遵循(包含头,不包含尾)
//5.修改字符
sb.replace(1, 4, "xyxyxyxyxy");//把1~4角标的替换
System.out.println(sb);
//缓冲区设置长度,只显示缓冲区内的字符
sb.setLength(20);
//反转,颠倒
sb.reverse();
/*
* 字符串缓冲区中维护了一个“可变长度的数组”
* 解释:其实就是超出内部数组长度后,新建数组长度要是原数组的1.x倍数
* 并将原数组的数据复制到新数组中,并将新的元素也添加到新数组中
*
*/
}
}
package cn.jason.stringbuffer.demo;
public class StringBufferDemo3 {
public static void main(String[] args) {
/*
*什么时候用字符串缓冲区
*数据很多, 个数无所谓确定,类型无所谓确定,只要最后都转成字符串。
*就使用StringBuffer这个容器。
*使用的局限性:1.必须最终转成字符串。
* 2.无法对存储进来的元素进行单独操作。因为存储进来的元素都变成字符串。
*/
StringBuffer buf1 = new StringBuffer("hello");
StringBuffer buf2 = new StringBuffer("java");
test(buf1,buf2);
System.out.println(buf1+"..."+buf2);
}
*什么时候用字符串缓冲区
*数据很多, 个数无所谓确定,类型无所谓确定,只要最后都转成字符串。
*就使用StringBuffer这个容器。
*使用的局限性:1.必须最终转成字符串。
* 2.无法对存储进来的元素进行单独操作。因为存储进来的元素都变成字符串。
*/
StringBuffer buf1 = new StringBuffer("hello");
StringBuffer buf2 = new StringBuffer("java");
test(buf1,buf2);
System.out.println(buf1+"..."+buf2);
}
private static void test(StringBuffer buf1, StringBuffer buf2) {
buf1.append(buf2); //把buf2的数据(java),追加到buf1(java)后
buf1=buf2; //把buf2的对象地址赋给buf1。(buf1指向java的地址)
//看到对象之间的运算,要判断运算的是其内部数据(比如用方法),还是控制其地址。
//就像上面的等于号,并不是赋值的意思,而是现在对象buf1指向对象buf2的地址值,对象本身不会改变
//当函数出栈之后,buf1便还是之前被buf2追加后的地址(hellojava)
System.out.println(buf1+"..."+buf2);
}
buf1.append(buf2); //把buf2的数据(java),追加到buf1(java)后
buf1=buf2; //把buf2的对象地址赋给buf1。(buf1指向java的地址)
//看到对象之间的运算,要判断运算的是其内部数据(比如用方法),还是控制其地址。
//就像上面的等于号,并不是赋值的意思,而是现在对象buf1指向对象buf2的地址值,对象本身不会改变
//当函数出栈之后,buf1便还是之前被buf2追加后的地址(hellojava)
System.out.println(buf1+"..."+buf2);
}
}