字符串 —— String?StringBuffer?StringBuilder?

字符串常用的操作就是拼接,特别是SQL语句的拼接。

做了个简单的试验,它们之间的差别惊人!

StringBuffer:

     public void testStringBuffer() {
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer(); for (int i = 0; i < COUNT; i++) {
sb.append(STR_INIT);
}
long end = System.currentTimeMillis(); System.out.println("StringBuffer 耗时:" + (end - start));
}

运行结果:基本在50毫秒

StringBuilder:

     public void testStringBuilder() {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder(); for (int i = 0; i < COUNT; i++) {
sb.append(STR_INIT);
}
long end = System.currentTimeMillis(); System.out.println("StringBuilder 耗时:" + (end - start));
}

运行结果:平均50毫秒,最低30多毫秒,最高90多毫秒

String:

     public void testString() {
long start = System.currentTimeMillis();
String s = ""; for (int i = 0; i < COUNT; i ++) {
s += STR_INIT;
} long end = System.currentTimeMillis(); System.out.println("Str 耗时:" + (end - start));
}

运行结果:2分多钟(是StringBuffer,StringBilder的上千倍)

代码说明:

for循环的次数(COUNT)为 10000


StringBuffer和StringBuilder的区别:

StringBuffer——线程安全的

StringBuilder——非线程安全

JDK API建议:如果不涉及线程问题,建议使用StringBuilder

个人建议:当需要字符串做拼接时,使用StringBuilder吧!


UPDATE:2016-5-23

重新学习发现内存也是可以计算的。

内存的差别倒是不大,跟时间比起来,可以忽略不计了。

详细代码请参考:Github

上一篇:308. Range Sum Query 2D - Mutable


下一篇:Mysql系列八:Mycat和Sharding-jdbc的区别、Mycat分片join、Mycat分页中的坑、Mycat注解、Catlet使用