StringBuffer

StringBuffer

StringBuffer是一个字符串缓冲区,是一个容器,无论你对这个对象进行如何的操作,他总是这一个对象,只是不断的更新。

StringBuffer的特点:

  1. 长度可变
  2. 可操作的数据类型多
  3. 操作结束后可以通过toSting转换成字符串类型。

StringBuffer的用法

  1. StringBuffer对象的初始化
    StringBuffer对象的初始化不像String类的初始化一样,Java提供的有特殊的语法,而通常情况下一般使用构造方法进行初始化。
    例如:
StringBuffer s = new StringBuffer();

这样初始化出的StringBuffer对象是一个空的对象,如果需要创建带有内容的StringBuffer对象,则可以使用:

StringBuffer s = new StringBuffer(“abc”);

这样初始化出的StringBuffer对象的内容就是字符串”abc”。

需要注意的是,StringBuffer和String属于不同的类型,也不能直接进行强制类型转换,下面的代码都是错误的:

StringBuffer s = “abc”; 	//赋值类型不匹配
StringBuffer s = (StringBuffer)”abc”; 	//不存在继承关系,无法进行强转

StringBuffer对象和String对象之间的互转

代码如下:

String s = “abc”;
StringBuffer sb1 = new StringBuffer(“123”);
StringBuffer sb2 = new StringBuffer(s); //String转换为StringBuffer
String s1 = sb1.toString(); //StringBuffer转换为String 

常用方法

  1. 构造函数
    StringBuffer有四个构造函数:
StringBuffer() //value内容为空,并设置容量为16个字节;
StringBuffer(CharSequece seq)  //使用seq初始化,容量在此基础上加16;
StringBuffer(int capacity) //设置特定容量;
StringBuffer(String str)  //使用str初始化,容量str大小的基础上加16;
  1. append方法
    由于继承了Appendable接口,所以要实现append方法,StringBuffer类对几乎所有的基本类型都重载了append方法:
append(boolean b)
append(char c)
append(char[] str)
append(char[] str,int offset,int len)
append(CharSequence s)
append(CharSequence s,int start,int end)
append(double d)
append(float f)
append(int i)
append(long lng)
append(Object obj)
append(String str)
append(StringBuffer sb)

(3)insert方法
insert方法可以控制插入的起始位置,也几乎对所有的基本类型都重载了insert方法:

insert(int offser,boolean b)
insert(int offset,char c)
insert(int offset,char[] str)
insert(int index,char[] str,int offset,int len)
insert(int dsfOffset,CharSequence s)
insert(int dsfOffset,CharSequence s,int start,int end)
insert(int offset,double d)
insert(int offset,float f)
insert(int offset,int i)
insert(int offset,long l)
insert(int offset,Object obj)
insert(int offset,String str)

(4)其它会改变内容的方法
上面的那些方法会增加StringBuffer的内容,还有一些方法可以改变StringBuffer的内容:

StringBuffer delete(int start,int end) //删除从start到end(不包含)之间的内容;
StringBuffer deleteCharAt(int index)//删除index位置的字符;
StringBuffer replace(int start,int end,String str) //用str中的字符替换value中从start到end位置的子序列;
StringBuffer reverse() //反转;
void setCharAt(int index,char ch) //使用ch替换位置index处的字符;
void setLength(int newLength) //可能会改变内容(添加'\0');

(5)其它常用方法
下面这些方法不会改变内容:

int capacity() //返回value的大小即容量;
int length() //返回内容的大小,即count;
char charAt(int index) //返回位置index处的字符;
void ensureCapacity(int minimumCapacity) //确保容量至少是minimumCapacity;
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) //返回srcBegin到srcEnd的字符到dst;
int indexOf(String str) //返回str第一次出现的位置;
int indexOf(String str,int fromIndex) //返回从fromIndex开始str第一次出现的位置;
int lastIndexOf(String str) //返回str最后出现的位置;
int lastIndexOf(String str,int fromIndex) //返回从fromIndex开始最后一次出现str的位置;
CharSequence subSequence(int start,int end) //返回字符子序列;
String substring(int start) //返回子串;
String substring(int start,int end) //返回子串;
String toString() //返回value形成的字符串;
void trimToSize() //缩小value的容量到真实内容大小;

String与StringBuffer的区别

  1. 运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuffer > String

  2. String为字符串常量,而StringBuffer为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
    例:

String str=”abc”;
System.out.println(str);
str=str+”de”;
System.out.println(str);

如果运行这段代码会发现:
先输出“abc”,然后又输出“abcde”
看上去好像是str这个对象被更改了,其实,JVM对于这几行代码是这样处理的:
首先创建一个String对象str,并把“abc”赋值给str;
然后在第三行中,其实JVM又创建了一个新的对象也名为str;
然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了。
所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。
所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

所以:
String适用于少量的字符串操作的情况;
如果对字符串修改的较多,需要线程安全就用StringBuffer。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值