String,StringBuffer与StringBulider三者的区别

原文地址为: 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可以允许多线程操作。所以根据实际情况来选择使用二者中的哪一个。


转载请注明本文地址: String,StringBuffer与StringBulider三者的区别

猜你喜欢

转载自blog.csdn.net/hong2511/article/details/80843092