String,StringBuffer与StringBulider三者的区别


      

       我们都只到String和StringBuffer的区别,即String是不可拓展的,即String如果要实现A字符串+B字符串的效果,则不能直接把B接在A后面,而必须新开一个C,然后把A+B放进C.而StringBuffer是可拓展的,如果A是StringBuffer要实现A+B的效果只要把B放进A后面就行了(append())。那么为什么他们有这样的区别呢,还是来看看源码就知道了。

//String   
public final class String  
{  
        private final char value[];  //注意这个final
  
         public String(String original) {  
              // 把原字符串original切分成字符数组并赋给value[];  
         }  
}  
  
//StringBuffer   
public final class StringBuffer extends AbstractStringBuilder  
{  
         char value[]; //继承了父类AbstractStringBuilder中的value[]  
         public StringBuffer(String str) {  
                 super(str.length() + 16); //继承父类的构造器,并创建一个大小为str.length()+16的value[]数组  
                 append(str); //将str切分成字符序列并加入到value[]中  
        }  
}  
可以看出 String和StringBuffer中的value[]都用于存储字符序列。

但是,String中的是常量(final)数组,只能被赋值一次。而StringBuffer中的value[]就是一个很普通的数组,而且可以通过append()方法将新字符串加入value[]末尾。这样也就改变了value[]的内容和大小了。


接下来看看StringBuffer和StringBulider(JDK1.5之后才有的),其实这两者没有什么本质的区别,只不过,StringBuffer是线程安全的,而StringBulider是非线程安全的,当然StringBuilder的效率肯定会更高,但是StringBuffer可以允许多线程操作。所以根据实际情况来选择使用二者中的哪一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值