您的位置:首页 > 产品设计 > UI/UE

站稳马步——(4)String/StringBuffer/StringBuilder

2010-11-02 11:31 387 查看
String、StringBuffer和StringBuilder的区别

这是面试中经常问到的问题。

所以,网上答案很多。

/**
*
* @author: ydj
* @createTime: Nov 2, 2010 9:40:05 AM
*
*/
public class TestStringStringBuffer {

public static void stringReplace(String text) {
// 把textString的地址copy给text,text也指向了textString的"java"
// text.replace('j', 'i');的结果是"iava"
// text = text.replace('j', 'i');就是重新使text指向"iava"
// 由于该方法的返回类型是void,所以原来的textString没变
text = text.replace('j', 'i');
System.out.println(text);
}

public static void bufferReplace(StringBuffer text) {
// textBuffer的地址copy给text
// 然后沿着text指向的字符串(其实也就是textBuffer指向的对象)操作,添加一个"C"
// 虽然没有任何返回,但是这个操作影响到了textBuffer所指向的字符串
// 所以上个方法打印"java",这个方法打印"javaC"
text = text.append("C");
System.out.println(text);
}

public static void main(String args[]) {
String textString = new String("java");
StringBuffer textBuffer = new StringBuffer("java");
StringBuilder textBuilder = new StringBuilder("java");

stringReplace(textString);
bufferReplace(textBuffer);

System.out.println(textString + textBuffer);
}
}


在开发中,如果确定字符串会经常变化(拼接),建议使用StringBuffer(线程安全);如果再确认是在单线程环境中,建议使用StringBuilder(非线程安全)。打开Jdk源代码看看便知:StringBuffer中方法基本都是同步的(synchronized)——线程安全;StringBuilder是从 JDK 5 开始,为StringBuffer补充了一个单个线程使用的等价类。

故而,基本性能是:StringBuilder>StringBuffer>String
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: