String StringBuffer StringBuilder

String是一个类,但却是不可变的,所以String创建的算是一个字符串常量,StringBuffer和StringBuilder都是可变的。所以每次修改String对象的值都是新建一个对象再指向这个对象。而使用StringBuffer则是对StringBuffer对象本身进行操作。所以在字符串j经常改变的情况下,使用StringBuffer要快得多。

但在某些情况下:

Java代码
  1. String S1 = “Who” + “ is” + “ faster?”;   
  2. StringBuffer Stb = new StringBuilder(“Who”).append(“ is”).append(“ faster?”);  
Java代码
  1. String S1 = “Who” + “ is” + “ faster?”;   
  2. StringBuffer Stb = new StringBuilder(“Who”).append(“ is”).append(“ faster?”);  

S1的素对会比Stb快得多, 是因为JVM把String对象的拼接解释成了StringBuffer对象的拼接,其实在JVM就是:

Java代码
  1. String S1="Who   is faster?";  
Java代码
  1. String S1="Who   is faster?";  

不过如果,字符串是来自其他对象,如:

Java代码
  1. String s1="Who";   
  2. String s2=" is";   
  3. String s3=" faster?";   
  4. String   st=s1+s2+s3;  
Java代码
  1. String s1="Who";   
  2. String s2=" is";   
  3. String s3=" faster?";   
  4. String   st=s1+s2+s3;  

这个时候,String的速度就比不上StringBuffer了。

StringBuffer和StringBuilder

在操作字符串对象,StringBuiler是最快的,StringBuffer次之,String最慢。

Java代码
  1. public final class StringBuffer   
  2.    extends AbstractStringBuilder   
  3.    implements java.io.Serializable, CharSequence   
  4.   
  5. public final class StringBuilder   
  6.    extends AbstractStringBuilder   
  7.    implements java.io.Serializable, CharSequence  

Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。


StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步, StringBuilder的速度比StringBuffer快。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。两者的方法基本相同。

如果要多次操作字符串,使用StringBuffer和StringBuilder会提高效率,但至少在数量级超过百万时,StringBuilder的速度才会体现出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值