java 风景日历_Java SE 第二篇

//StringBuilder 继承于 AbstractStringBuilder(AbstractStringBuilder 实现了 Appendable 接口, CharSequence 接口的部分方法)

public final classStringBuilderextendsAbstractStringBuilderimplementsjava.io.Serializable, CharSequence

{//无参构造器,调用了父类有参构造器,初始化字符数组容量为 16

publicStringBuilder() {super(16);

}public StringBuilder(intcapacity) {super(capacity);

}publicStringBuilder(String str) {super(str.length() + 16);

append(str);

}

@OverridepublicStringBuilder append(Object obj) {returnappend(String.valueOf(obj));/*这里我们给出 java.lang.String 类定义的 valueOf()方法

public static String valueOf(Object obj) {

return (obj == null) ? "null" : obj.toString();

}*/}

@OverridepublicStringBuilder append(String str) {super.append(str);return this;

}

}//从上面可以看出 StringBuilder 类的大部分方法都是继承自 AbstractStringBuilder,所以我们直接看 AbStractStringBuilder 类是怎么样实现这些方法的

abstract class AbstractStringBuilder implementsAppendable, CharSequence {char[] value;//底层用的是 char 数组来存储数据

int count;//字符串长度//无参构造器

AbstractStringBuilder() {

}//有参构造器,用于初始化 char 数组的容量

AbstractStringBuilder(intcapacity) {

value= new char[capacity];

}//返回字符串长度

@Overridepublic intlength() {returncount;

}//返回字符数组的容量

public intcapacity() {returnvalue.length;

}//追加方法

publicAbstractStringBuilder append(String str) {if (str == null)returnappendNull();int len =str.length();

ensureCapacityInternal(count+ len);//判断是否需要扩容

str.getChars(0, len, value, count);//底层是:System.arraycopy(str, 0, value, count, len - 0);

count +=len;return this;

}private void ensureCapacityInternal(intminimumCapacity) {//overflow-conscious code

if (minimumCapacity - value.length > 0) {

value= Arrays.copyOf(value, newCapacity(minimumCapacity));//底层是:System.arraycopy(value, 0, copy, 0, Math.min(value.length, newCapacity)); + return copy;

}

}private int newCapacity(intminCapacity) {//overflow-conscious code

int newCapacity = (value.length << 1) + 2;//新容量 = old容量 * 2 + 2

if (newCapacity - minCapacity < 0) {

newCapacity=minCapacity;

}return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0) ?hugeCapacity(minCapacity) : newCapacity;

}private int hugeCapacity(intminCapacity) {if (Integer.MAX_VALUE - minCapacity < 0) { //overflow

throw newOutOfMemoryError();

}return (minCapacity > MAX_ARRAY_SIZE) ?minCapacity : MAX_ARRAY_SIZE;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值