JDK源码阅读 AbstractStringBuilder/StringBuffer/StringBuilder

   1.为什么初始化就把数组的大小设为16,而如果使用有参构造函数也是要传入的字符串长度+16?
    答:因为使用StringBuffer或者StringBuilder都会频繁的使用append,假设value数组使用固定长度,那么每一次append或者remove都需要创建新的数组进行扩充,消耗性能,ArrayList也是这样设计的。这也是为什么额外用count变量来表示length。
    2.如何对数组进行扩充的?
    答:每次append的时候都会去判断当前count+newStr.length是否大于value.length,如果大于表示需要扩充,再判断是否大于value.length << 1 + 2,如果还是大扩充到count+newStr.length否则扩充到value.length << 1 +2
    3.为什么要有toStringCache这个变量?
    答:toStringCache是专门为toString()方法使用的,所有对字符串插入、删除、翻转、替换等修改value数组的操作都会将这个cache设为空,而toString方法会判断cache是否为空,不为空从value数组copy一个新的数组,如果存在就直接用它构建String对象

   4.为什么要有AbstractStringBuilder这个类?
    答:是一个抽象类,作为Stringbuffer和Stringbuilder的父类,定义并实现了它们共同拥有的很多方法,比如append等,还有成员变量value数组和count等
    5.既然StringBuffer和StrngBuilder都继承了它,为什么还要重写一遍append之类的方法?
    答:因为大部分方法都需要返回一个对象,如果不重写,那么每次在使用的时候都必须做一次向下转型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值