JavaSE——day10字符串缓冲区StringBuffer

为什么要引入StingBuffer?

        String 是一个不可变的字符序列,这不能满足我们的需求,而字符串缓冲区StringBuffer是一个可变的字符序列。
String和StringBuffer的区别?

        1、可变性: String是一个不可变的字符序列,而StringBuffer是一个可变的字符序列。
        2、内存中:String在定义时会在内存中常量池中开辟空间,比较耗费内存;StringBuffer(字符串缓冲区)会在使用完毕后释放内存。

       StringBuffer中的构造方法: 
构造方法摘要
StringBuffer()
          构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(CharSequence seq)
          public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
StringBuffer(int capacity)
          构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str)
          构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

StringBuffer的获取功能:


 int capacity()
          返回当前容量。 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
 int length()
          返回长度(字符数)。
获取功能和构造方法的例子:
public class Demo {

	public static void main(String[] args) {
		StringBuffer sb =new StringBuffer();//创建一个无参构造的对象sb
		System.out.println("sb:"+sb+".");//没有输出地址值,因为重写了toString
		
		String s = new String("Helloworld");
//		StringBuffer ssb = "helloworld";//字符串缓冲区没有这样的写法
		StringBuffer sb0 = new StringBuffer("helloworld");//构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
		StringBuffer sb1 = new StringBuffer(s);//构造一个字符串缓冲区,并将其初始化为String类型的对象s,即"Helloworld"
		System.out.println(sb0);
		System.out.println(sb1);
		
		StringBuffer sb2 = new StringBuffer(20);//容量变为50
		System.out.println("length():"+sb2.length()+",无参默认capacity():"+sb.capacity()+",初始化为20的capacity():"+sb2.capacity());
		
		
		StringBuffer sb3 = new StringBuffer(sb0);//参数应是CharSequence 类型的
		System.out.println(sb0);
		
	}

}

StringBuffer的添加功能

 StringBuffer append(boolean b)
          将 boolean 参数的字符串表示形式追加到序列。
 StringBuffer append(char c)
          将 char 参数的字符串表示形式追加到此序列。
 StringBuffer append(char[] str)
          将 char 数组参数的字符串表示形式追加到此序列。
 StringBuffer append(char[] str, int offset, int len)
          将 char 数组参数的子数组的字符串表示形式追加到此序列。
 StringBuffer append(CharSequence s)
          将指定的 CharSequence 追加到该序列。
 StringBuffer append(CharSequence s, int start, int end)
          将指定 CharSequence 的子序列追加到此序列。
 StringBuffer append(double d)
          将 double 参数的字符串表示形式追加到此序列。
 StringBuffer append(float f)
          将 float 参数的字符串表示形式追加到此序列。
 StringBuffer append(int i)
          将 int 参数的字符串表示形式追加到此序列。
 StringBuffer append(long lng)
          将 long 参数的字符串表示形式追加到此序列。
 StringBuffer append(Object obj)
          追加 Object 参数的字符串表示形式。
 StringBuffer append(String str)
          将指定的字符串追加到此字符序列。
 StringBuffer append(StringBuffer sb)
          将指定的 StringBuffer 追加到此序列中。
 StringBuffer appendCodePoint(int codePoint)
          将 codePoint 参数的字符串表示形式追加到此序列。

StringBuffer类中的append方法貌似可以追加所有类型的数据!
指定位置添加

StringBuffer insert(int offset, boolean b)
          将 boolean 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, char c)
          将 char 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, char[] str)
          将 char 数组参数的字符串表示形式插入此序列中。
 StringBuffer insert(int index, char[] str, int offset, int len)
          将数组参数 str 的子数组的字符串表示形式插入此序列中。
 StringBuffer insert(int dstOffset, CharSequence s)
          将指定 CharSequence 插入此序列中。
 StringBuffer insert(int dstOffset, CharSequence s, int start, int end)
          将指定 CharSequence 的子序列插入此序列中。
 StringBuffer insert(int offset, double d)
          将 double 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, float f)
          将 float 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, int i)
          将 int 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, long l)
          将 long 参数的字符串表示形式插入此序列中。
 StringBuffer insert(int offset, Object obj)
          将 Object 参数的字符串表示形式插入此字符序列中。
 StringBuffer insert(int offset, String str)
          将字符串插入此字符序列中。
和append方法一样,insert方法也可插入几乎所有类型!返回字符串缓冲区本身。
删除功能
StringBuffer delete(int start, int end)
          移除此序列的子字符串中的字符。
 StringBuffer deleteCharAt(int index)
          移除此序列指定位置的 char
一个是移除一个指定始尾的字符串,一个是移除一个指定位置的char,都返回StringBuffer本身。

反转功能

 StringBuffer reverse()
          将此字符序列用其反转形式取代。
   就现在的观察来看,具有字符串反转方法的只有StringBuffer,String、Character、Integer等类中都没有reverse()这个方法。所以如果需要反转功能,就必须得先变成StringBuffer类,然后才能调用反转方法。
截取功能

 String substring(int start)
          返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
 String substring(int start, int end)
          返回一个新的 String,它包含此序列当前所包含的字符子序列。
截取功能同String。
替换功能

 
 
   
 StringBuffer replace(int start, int end, String str)
          使用给定 String 中的字符替换此序列的子字符串中的字符。
格式不同于String,这个我们直接在形式参数里输入替代的值,被替代部分是用start--end这个区间锁定的。



StringBuffer,String,StringBuilder的区别?

 StringBuffer和StringBuilder都是一个可变的字符序列,提供一个缓冲区.(两者都看做容器)
 StringBuffer:线程安全的,同步的,执行效率低
 StringBuilder:线程不安全的,不同步的,执行效率高,并且单线程中优先采用StringBuilder
 
 StringBuffer 执行效率虽然低,但是由于String类型,并且他可变的字符序列,提供了缓冲区

猜你喜欢

转载自blog.csdn.net/weixin_38930706/article/details/80076902