【Java】String、StringBuffer、StringBilder性能比较

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/****
 * 该程序对String、StringBuffer、StringBuilder三个类进行比较
 * 
 * String与StringBuffer的比较 String创建字符串是不可变的,任何对String的改变都会引发新的String对象的生成;
 * StringBuffer是可变的,任何对它所指代的字符串的改变都不会产生新的对象; 所以,当改变字符串的内容时,StringBuffer能获得更好的性能;
 * 
 * 
 * 
 * StringBilder 与 StringBuffer的比较 StringBuffer是线程安全的;
 * StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高;
 * 所以,在单线程操作中,StringBuilder比StringBuffer效率更高~
 * 
 * 
 * 
 * 综上所述,如果我们的程序是在单线程下运行,或者是不必考虑到线程同步问题,我们应该优先使用StringBuilder类;当然,如果要保证线程安全,
 * 自然非StringBuffer莫属了。
 * 
 * @author cxj123
 *
 */


public class StringBuilderTester {
private static final String base = " base string. ";
private static final int count = 2000000;


public static void stringTest() {
long begin, end;
begin = System.currentTimeMillis();
String test = new String(base);
for (int i = 0; i < count / 100; i++) {
test = test + " add ";
}
end = System.currentTimeMillis();
System.out.println((end - begin)
+ " millis has elapsed when used String. ");
}


public static void stringBufferTest() {
long begin, end;
begin = System.currentTimeMillis();
StringBuffer test = new StringBuffer(base);
for (int i = 0; i < count; i++) {
test = test.append(" add ");
}
end = System.currentTimeMillis();
System.out.println((end - begin)
+ " millis has elapsed when used StringBuffer. ");
}


public static void stringBuilderTest() {
long begin, end;
begin = System.currentTimeMillis();
StringBuilder test = new StringBuilder(base);
for (int i = 0; i < count; i++) {
test = test.append(" add ");
}
end = System.currentTimeMillis();
System.out.println((end - begin)
+ " millis has elapsed when used StringBuilder. ");
}


public static String appendItemsToStringBuiler(List<String> list) {
StringBuilder b = new StringBuilder();


for (Iterator i = list.iterator(); i.hasNext();) {
b.append(i.next()).append(" ");
}


return b.toString();
}


public static void addToStringBuilder() {
List<String> list = new ArrayList<String>();
list.add(" I ");
list.add(" play ");
list.add(" Bourgeois ");
list.add(" guitars ");
list.add(" and ");
list.add(" Huber ");
list.add(" banjos ");


System.out.println(StringBuilderTester.appendItemsToStringBuiler(list));
}


public static String appendItemsToStirngBuffer(List<String> list) {
StringBuffer b = new StringBuffer();


for (Iterator i = list.iterator(); i.hasNext();) {
b.append(i.next()).append(" ");
}


return b.toString();
}


public static void addToStringBuffer() {
List<String> list = new ArrayList<String>();
list.add(" I ");
list.add(" play ");
list.add(" Bourgeois ");
list.add(" guitars ");
list.add(" and ");
list.add(" Huber ");
list.add(" banjos ");


System.out.println(StringBuilderTester.appendItemsToStirngBuffer(list));
}


public static void main(String[] args) {
stringTest();
stringBufferTest();
stringBuilderTest();
addToStringBuffer();
addToStringBuilder();
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JimCarter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值