基本介绍
1、StringBuffer类是对String类的增强,其代表了可变字符序列,可以对字符串的内容进行增删。
2、很多方法和String是相同的,但是StringBuffer是可变长度的。
3、StringBuffer是一个容器。
4、类结构图
1)StringBuffer的直接父类,是AbstractStringBuffer;
2)StringBuffer实现了Serializable,即可序列化;
3)在父类中,AbstractStringBuilder有属性char[ ] value,不是final类型。,该value字符串存放字符串内容,因此存放在堆中,
4)StringBuffer是一个final类,不能被继承。
5)因为StringBuffer内容存储在char value[]中,所以每次的增加删除都是在堆中进行修改,不用每次创建地址,不是每次都创建新的对象。
String和StringBuffer的对比:
1、String保存的是字符串常量,里面的值不能修改,每次String的修改都是对地址的修改,效率较低。保存在private final char value[];
2、StringBuffer保存的是字符串变量,里面的值可以被修改,每次StringBuffer的更新实际上就是内容的更新,不用每次都修改地址。StringBuffer里的char[] value的字符数组存放在堆里。
StringBuffer构造器
String和StringBuffer相互转换
StringBuffer常用方法:
注意:append参数也可以是字符串
public class Study {
public String toString() {//重写Object类中toString()方法
return getClass().getName();
}
public static void main(String[] args) {
StringBuffer s1=new StringBuffer("abcd1234!?,;");
StringBuffer s2=new StringBuffer("987654321987654");
StringBuffer s3=new StringBuffer("987654321");
System.out.println("↓↓↓StringBuffer类的一些常用方法如下↓↓↓");
System.out.println("-----------------------------------------------------");
System.out.println("字符串s1的长度为:" + s1.length());//返回字符串的实际长度
System.out.println("-----------------------------------------------------");
System.out.println("字符串s1所占容器的大小为:" + s1.capacity());//返回字符串所占容器的总大小
System.out.println("-----------------------------------------------------");
System.out.println("获取字符串s1中第2个位置的字符:" + s1.charAt(2));
System.out.println("-----------------------------------------------------");
System.out.println("子字符串'654'第一次出现在字符串s2中的索引为:" + s2.indexOf("654"));
System.out.println("从指定的索引6开始搜索,返回子字符串'654'第一次出现在字符串s2中的索引:" + s2.indexOf("654",6));
System.out.println("-----------------------------------------------------");
System.out.println("子字符串'987'最后一次出现在字符串s2中的索引为:" + s2.lastIndexOf("987"));
System.out.println("从指定的索引5开始反向搜索,返回字符串'87'在字符串s2中最后一次出现的索引:" + s2.lastIndexOf("87",5));
System.out.println("-----------------------------------------------------");
s1.append('x');//在字符串s1的末尾添加字符'c'
s1.append("Java");//在字符串s1的末尾添加字符串"Java"
System.out.println("修改后的字符串s1为:" + s1);
System.out.println("-----------------------------------------------------");
s1.insert(4,"abcd");//在第4个位置插入字符串"abcd"
System.out.println("修改后的字符串s1为:" + s1);
System.out.println("-----------------------------------------------------");
s1.deleteCharAt(1);//删除字符串s1中第一个位置的字符
s1.delete(2,5);//删除字符串s1中第2到第4个位置的字符
System.out.println("修改后的字符串s1为:" + s1);
System.out.println("-----------------------------------------------------");
s1.replace(4,8,"5678");//将字符串s1中第4到第7个位置的字符串修改为"5678"
System.out.println("修改后的字符串s1为:" + s1);
System.out.println("-----------------------------------------------------");
s1.setCharAt(1,'b');//将字符串s1中第一个位置的字符修改为'b'
System.out.println("修改后的字符串s1为:" + s1);
System.out.println("-----------------------------------------------------");
s2.reverse();//将字符串s2反转
System.out.println("修改后的字符串s2为:" + s2);
System.out.println("-----------------------------------------------------");
System.out.println("截取字符串s1从第4个位置开始到结尾:" + s1.substring(4));
System.out.println("-----------------------------------------------------");
System.out.println("截取字符串s1从第4个位置开始到第7个位置结尾:" + s1.substring(4,8));
System.out.println("-----------------------------------------------------");
System.out.println("获取s1的变量类型:" + s1.getClass().getName());
System.out.println("将对象信息转化为字符串:" + s2.toString());
}
}