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的获取功能:


 intcapacity()
          返回当前容量。 (如果超过容量,系统自动分配(存储字符串的时候,英文的))
 intlength()
          返回长度(字符数)。
获取功能和构造方法的例子:
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的添加功能

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

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

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

反转功能

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

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

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



StringBuffer,String,StringBuilder的区别?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值