JAVA源码之JDK(三)――String、StringBuffer、StrinBuilder(二)

2014-11-24 07:37:08 · 作者: · 浏览: 1
1 public AbstractStringBuilder append(String str) {
2 if (str == null) str = "null";
3 int len = str.length();
4 if (len == 0) return this;
5 int newCount = count + len;
6 if (newCount > value.length)
7 expandCapacity(newCount);//这个扩容的方法如下
8 str.getChars(0, len, value, count);
9 count = newCount;
10 return this;
11 }
1 void expandCapacity(int minimumCapacity) {
2 int newCapacity = (value.length + 1) * 2;
3 if (newCapacity < 0) {
4 newCapacity = Integer.MAX_VALUE;
5 } else if (minimumCapacity > newCapacity) {
6 newCapacity = minimumCapacity;
7 }
8 value = Arrays.copyOf(value, newCapacity);
9 }
  从上面我们可以看出,一是如果拼接字符串时,变量为NULL,则按"null"来处理;二则是那个扩容。我们在构造一个StringBuffer时,如果不设置一个长度,则JDK会默认长度为16,如果我们最终拼接的字符串的长度远远超出这个长度,则StringBuffer会频繁的做扩容操作,所以,在new StringBuffer(),传入一个预估的长度参数是一个好习惯。
java.lang.StringBuilder
这个类与StringBuffer的区别就是synchronized,提高效率嘛,都懂得。笔者这里测试了一下,大概也就差1倍的速度。测试代码如下:
View Code
测试结果为:
StringBuffer平均耗时399ms
StringBuilder平均耗时254ms
好了,本次的学习就到这里吧。
学习是件快乐而又有成就感的事。