首页 > 代码库 > 字符串连接操作下的String和StringBuilder(二)
字符串连接操作下的String和StringBuilder(二)
重点关注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重载方法 操作与此相似。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。