我们从源代码的角度来看它们两个的区别。我们就从使用最多的和方法来抽丝剥茧,投过现象看本质。
先说StringBuilder的代码
- public StringBuilder append(String str) {
- super.append(str);
- return this;
- }
- public String toString() {
- // Create a copy, don't share the array
- return new String(value, 0, count);
- }
复制代码
再来看看StringBuffer的源代码:
- public synchronized StringBuffer append(String str) {
- super.append(str);
- return this;
- }
- public synchronized String toString() {
- return new String(value, 0, count);
- }
复制代码
从这些代码上,可以很容易地看到StringBuffer的方法都加了synchronized锁。但是StringBuilder的方法却没有。而有时别不需要锁(比如只一个方法内部使用),而此时使用StringBuffer会增加无用的锁,效率就会下降。此时,使用StringBuilder才是更好的选择。 |