我这边测试10万次结果为:
100万次结果为:
1000万次结果为:
在数量太少的情况下,StringBuilder 在StringBuffer加锁的情况下,并没有体现出优势,反而StringBuffer 更胜一筹。
这种情况相信很多测试过的小伙伴也应该遇到过???
对于这种情况,其实也不难理解,append的操作本质还是操作char[] 数组,我们还是继续看源码,
StringBuffer比StringBuilder多了一个缓冲区,
我们看下StringBuffer的toString方法:
StringBuilder 的toString()方法:
@Override public String toString() { // Create a copy, don\'t share the array return new String(value, 0, count); }我们可以看到StringBuffer的缓存有数据时,就直接在缓存区取,而StringBuilder每次都是直接copy。这样StringBuffer 相对StringBuilder来说其实是做了一个性能上的优化,所有只有当数量足够大,StringBuffer的缓冲区填补不了加锁影响的性能时,StringBuilder才在性能上展现出了它的优势