StringBuffer

基本介绍

  1. java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。

  1. 很多方法与String相同,但StringBuffer是可变长度的。StringBuffer是一个容器

结构剖析

image-20220402091114634

  1. 直接父类是 AbstractStringBuilder

  1. Serializable接口表示String是串行化的,表示String类可以在网络上传输

  1. CharSequence接口表示String类是一个有序字符集合

  1. 在父类中 AbstractStringBuilder 有属性char[] value ,不是final,该value数组存放字符串内容,存放在堆中,不用每次都更新地址

  1. StringBuffer 是一个final类,不能被继承

 

 

StringBuffer Vs String

  1. String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低 //private final char value[]

  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高//char [] value; // 这个放在堆,String是放在常量池中.

StringBuffer更新过程,只有当数组长度不够的时候,会创建新的数组,然后拷贝过去,再指向新的数组

image-20220402093213797

 

StringBuffer构造器

//1.创建一个 大小为 16的 char[],用于存放字符内容
StringBuffer stringBUffer = new StringBuffer();

//2 通过构造器指定 char[]大小= new StringBuffer(100);
StringBuffer StringBuffer1 = new StringBuffer(100);
//3。通过 给一个String 创建 StringBuffer,char[]大小就是 str.length()+ 16
StringBuffer hello = new StringBuffer("hello");

 

StringBuffer和String相互转换

//看String --> StringBuffer
String str = "hello tom";
//方式1 使用构造器
//注意:返回的才是StringBuffer对象,对str没有影响
StringBuffer stringBuffer = new StringBuffer(str);
//方式2 使用的是append方法
StringBuffer stringBuffer1 = new StringBuffer();
stringBuffer1 = stringBuffer1.append(str);

//看StringBuffer-->String
StringBuffer stringBuffer2 = new StringBuffer("hello tom");
//方式1,使用StringBuffer的toString方法
String s = stringBuffer2.toString();

//使用构造器
String s1 = new String(stringBuffer2);

 

StringBuffer常用方法

  1. 增 append // 传入null 会转成null字符串存入数组

  2. 删 delete(start,end)

  3. 改replace(start,end,string)//将start--end间的内容替换掉,不含end

  4. 查indexOf //如果子串在字符串第1次出现的索引,如果找不到返回-1

  5. 插insert

  6. 获取长度

练习

读源码

public class StringBufferExercise01 {
   String str = null;// ok
       StringBuffer sb = new StringBuffer(); //ok
       sb.append(str);//需要看源码 , 底层调用的是 AbstractStringBuilder 的 appendNull
       System.out.println(sb.length());//4
       System.out.println(sb);//null
       
       
       //下面的构造器,会抛出 NullpointerException
       StringBuffer sb1 = new StringBuffer(str);//看底层源码 super(str.length() + 16);
       System.out.println(sb1);
}

 

posted @ 2022-04-02 10:09  子非鱼!  阅读(243)  评论(0编辑  收藏  举报