java中关于String、StringBuffer和StringBuilder

一、StringBuffer

API解释:

它是线程安全(Synchronized)可变字符串。可以通过某些方法调用来改变序列的长度和内容。
StringBuffer的主要操作是append和insert方法,它们可以被重载使得可以接受所有数据类型,任何给定的数据类型都会被有效地转化为一个String字符串并被添加到StringBuffer字符串缓冲区的后面。
append方法总是将这些字符添加到字符串缓冲区的末端。insert方法则将字符添加到特定的位置。

eg:有一个StringBuffer对象z,内容为”start”,当执行z.append(“le”)后:z为”startle”;当执行z.insert(4,”le”)后:z为”starlet”
tips:在下标对应的位置前插入。

每个StringBuffer都有一个容量。只要字符串长度不超过容量就不会分配新的内部缓冲区。如果内容溢出了,它会自动扩容。
JDK5新增了一个等效的类StringBuilder,它使用单线程。往往使用StringBuilder更多,因为二者功能相同,而StringBuilder不使用Synchronization,速度更快!。

构造函数:

StringBuffer():构造默认容量为16字符无内容的可变字符串。
StringBuffer(int capacity):构造无内容的指定容量的可变字符串。
StringBuffer(String str):构造一个初始化为给定字符串的可变字符串。初始化容量为16加上给定字符串的长度。
StringBuffer(CharSequence seq):构造含有给定字符序列的可变字符串。初始化容量为16加上给定字符序列的长度。

常用方法:

(1)toString方法可以将该字符串缓冲区(容器)变为字符串。
(2)append()、insert()。可以插入任意类型数据,自动转换为String并添加进去。
(3)删除:delete(int start,int end)删除指定开始结束位置间的字符,含头不含尾。
(4)获取:charAt(int index)获取index上的字符;indexOf(String str)获取str第一次出现的位置。
(5)修改:replace(int start,int end,String str)将start开始到end的字符串替换为string;setCharAt(int index,char ch)将index位置的字符替换为ch
(6)反转:reverse();
(7)getChars(int srcBegin, int srcEnd, char[] dst,int dstBegin):将index为srcBegin到srcEnd-1的序列复制到dstBegin开始的数组中。

二、StringBuilder(JDK5.0)

字符串变量(非线程安全)。该类为StringBuffer的一个简易替换,在单线程时候使用效率更高。

三、String

字符串常量,字符串长度不可变。java中的String是immutable(不可变)的。

四、区别:

首先String类型是不可变的,它的底层实现是数组,数组可以被改变但是存放字符的数组在String类中被声明为私有,外部无法访问自然也无法修改。当我们对String类型进行改变的时候都会生成一个新的String对象返回。因此在需要经常改变字符串内容的时候最好不要使用String。

字符串的concatenation(+)操作符:

有两种情况:
(1)字符串常量拼接:
String str=”hello”+”word”;
JVM对字符串进行了优化,在编译时str就被优化为”hello word”
(2)字符串对象间的拼接:
String str1=”hello”;
String str2=”word”;
String str3=str1+str2;
底层调用StringBuffer的appen方法。过程如下:

StringBuffer sb=new StringBuffer(“”);
sb.append(str1);
sb.append(str2);
str4=sb.toString();

选择策略:
(1)String适合操作需要少量修改的数据。StringBuffer适合多线程大量操作的数据。StringBuilder适合单线程大量操作的数据。
(2)实际使用中尽量少使用+来进行频繁的连接。因为使用String的+操作符会导致多次创建String类对象,而是用StringBuilder则不会再重新创建对象。
(3)在使用字符串缓冲时尽量指定容量,如果需要操作的字符串长度小于16则无需考虑此问题。
(4)由于StringBuilder线程不安全。因此一般使用在方法内部来完成类似“+”的功能。而StringBuffer一般使用在全局变量中。

参考资料:
http://blog.csdn.net/kingzone_2008/article/details/9220691
JavaAPI文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值