共同学习Java源代码--常用工具类--StringBuffer(一)

 public final class StringBuffer
    extends AbstractStringBuilder

    implements java.io.Serializable, CharSequence

类是final的,表明不能被继承,本类继承自AbstractStringBuilder,实现了Serializable和CharSequence两个接口。

现在来看成员变量

 private transient char[] toStringCache;

私有的char数组变量,目前猜测是做缓存用,用transient修饰表明不会被序列化。

下面来看构造方法 

   public StringBuffer() {
        super(16);
    }

调用父类的构造方法,传入16这个参数为value赋初始长度。

    public StringBuffer(int capacity) {
        super(capacity);
    }

调用父类构造方法,将参数作为value的长度。

    public StringBuffer(String str) {
        super(str.length() + 16);
        append(str);
    }

调用父类构造方法,先将参数的长度加上16作为value的长度,然后将参数拼接到value中。

    public StringBuffer(CharSequence seq) {
        this(seq.length() + 16);
        append(seq);
    }

先调用第二个构造方法,将参数的长度加上16传进去,然后拼接参数。

构造方法介绍完毕。

    public synchronized int length() {
        return count;
    }

这个方法带了synchronized关键字,表明是个同步方法,返回的是count。

StringBuffer和StringBuilder的区别很多人说前者是线程安全的,其实不然,String源码里照样会给StringBuffer参数加锁,线程安全与否要看场景,光有个synchronized关键字不够的。。。

    public synchronized int capacity() {
        return value.length;
    }

这个方法返回数组value的长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值