标签:style blog http color java 使用 os io
//------------------------------------------------------------------------
写篇博客不容易,请尊重作者劳动成果。转载请注明出处:http://blog.csdn.net/chdjj
//------------------------------------------------------------------------
我觉得要通过源码研究一个类,应该先从整体上了解这个类,比如说这个类的继承体系,有哪些超类,继承了那些接口,提供了什么样的方法。然后,我们再去源码中了解具体的实现过程,这样才不会乱~
我们来看看StringBuilder和StringBuffer的继承关系:
public final class StringBuilder//1.5开始 extends AbstractStringBuilder implements java.io.Serializable, CharSequence public final class StringBuffer//1.0就有了 extends AbstractStringBuilder implements java.io.Serializable, CharSequence
package java.lang; /** * @author Mike McCloskey * @since 1.4 * @spec JSR-51 */ public interface CharSequence { int length(); char charAt(int index); CharSequence subSequence(int start, int end); public String toString(); }
abstract class AbstractStringBuilder implements Appendable, CharSequence
package java.lang; import java.io.IOException; public interface Appendable { Appendable append(CharSequence csq) throws IOException; Appendable append(CharSequence csq, int start, int end) throws IOException; Appendable append(char c) throws IOException; }
/** * The value is used for character storage. */ char[] value;//用于存放字符的数组 /** * The count is the number of characters used. */ int count;//当前字符总数
AbstractStringBuilder() {} AbstractStringBuilder(int capacity) { value = new char[capacity]; }
public void ensureCapacity(int minimumCapacity) { if (minimumCapacity > 0) ensureCapacityInternal(minimumCapacity); } /** * This method has the same contract as ensureCapacity, but is * never synchronized. */ private void ensureCapacityInternal(int minimumCapacity) { // overflow-conscious code if (minimumCapacity - value.length > 0) expandCapacity(minimumCapacity); } /** * This implements the expansion semantics of ensureCapacity with no * size check or synchronization. */ void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); }
public AbstractStringBuilder append(String str) { if (str == null) str = "null"; int len = str.length(); ensureCapacityInternal(count + len); str.getChars(0, len, value, count); count += len; return this; }
public void trimToSize() { if (count < value.length) { value = Arrays.copyOf(value, count); } }
public StringBuilder() { super(16); } public StringBuilder(int capacity) { super(capacity); } public StringBuilder(String str) { super(str.length() + 16); append(str); } public StringBuilder(CharSequence seq) { this(seq.length() + 16); append(seq); }
public StringBuilder append(Object obj) { return append(String.valueOf(obj)); } 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); }
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { s.defaultWriteObject(); s.writeInt(count); s.writeObject(value); } private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); count = s.readInt(); value = (char[]) s.readObject(); }
public synchronized int length() { return count; } public synchronized void trimToSize() { super.trimToSize(); } public synchronized StringBuffer append(String str) { super.append(str); return this; }
public StringBuffer append(CharSequence s) { // Note, synchronization achieved via other invocations if (s == null) s = "null"; if (s instanceof String) return this.append((String)s); if (s instanceof StringBuffer) return this.append((StringBuffer)s); return this.append(s, 0, s.length()); }
【源码】StringBuilder和StringBuffer源码深度剖析,布布扣,bubuko.com
【源码】StringBuilder和StringBuffer源码深度剖析
标签:style blog http color java 使用 os io
原文地址:http://blog.csdn.net/chdjj/article/details/38407329