标签:style blog color java 使用 strong io 数据
重点关注StringBuilder的append方法
使用source insight查看Jdk中提供的源码 定位到StringBuilder.java
搜索append方法 定位到append方法的一种重载
public StringBuilder append(String str) { super.append(str); return this; }
可见是调用父类的append方法
定位到父类的append(String str)方法
public AbstractStringBuilder append(String str) { if (str == null) str = "null"; int len = str.length(); if (len == 0) return this; int newCount = count + len; if (newCount > value.length) expandCapacity(newCount); str.getChars(0, len, value, count); count = newCount; return this; }
str为空和Len为0的情况不作叙述。
value的定义(char类型数组)
/** * The value is used for character storage. */ char value[];
count的定义(数组中已使用的)
/** * The count is the number of characters used. */ int count;
int newCount = count + len; if (newCount > value.length) expandCapacity(newCount);
newCount得到新的长度 和默认的字符数组长度作对比
如果append一个字符串之后长度超过默认value数组的长度就对其做扩容操作
/** * This implements the expansion semantics of ensureCapacity with no * size check or synchronization. */ void expandCapacity(int minimumCapacity) { int newCapacity = (value.length + 1) * 2; if (newCapacity < 0) { newCapacity = Integer.MAX_VALUE; } else if (minimumCapacity > newCapacity) { newCapacity = minimumCapacity; } value = Arrays.copyOf(value, newCapacity); }
char数组容量扩大至原来的2倍
将原有数据拷贝到新数组中。
子类的append的方法返回值类型为StringBuilder 父类的为AbstractStringBuilder类型
他们之间的转换牵扯到向上转型或者向下转型。
至于其他的append重载方法 操作与此相似。
字符串连接操作下的String和StringBuilder(二),布布扣,bubuko.com
字符串连接操作下的String和StringBuilder(二)
标签:style blog color java 使用 strong io 数据
原文地址:http://www.cnblogs.com/sphere/p/3877430.html