我的领悟之StringBuffer与StringBuilder异同

情景:公司项目在拼接sql时用到了StringBuilder类,为此深挖一下

 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence{
    }
 public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
{
}

StringBuffer和StringBuilder都是继承AbstractStringBuilder父类 实现的接口也都相同,两个类都有append()方法,进入源码
StringBuilder.append()

@Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }

StringBuffer.append()

@Override
    public synchronized StringBuffer append(String str) {
        toStringCache = null;
        super.append(str);
        return this;
    }

可以看到StringBuffer的append方法加了synchronized(同步)关键字修饰,自己理解是加锁,方法是线程安全的,所以速度要慢些,对应的,StringBuilder没有加同步关键字,线程不安全,速度快。

拓展:append方法中如果默认字符长度(16)不够,形成新的字符数组长度会*2+2,源码如下:

int newCapacity = (value.length << 1) + 2;

这里 x<<n 运算符实际测试了下,是x乘以2的n次方
x<<1=2x; x<<2=4x; x<<10=1024x;

/**
         * string机制
         * string对象不可修改 string str= "a",str = "b"
         * 逻辑是先在内存中创建String对象,对象的值为 a,然后这个实例对象指向str这个引用变量
         * str = "b"是再新开辟一片内存空间,创建string对象。值为b,指向str,并不是直接改原来对象的值
         */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值