String的优化 Stringbuffer和Stringbuilder


string

上次说到string是最好衍生出来的一种字符类型,实现原理是由char[]。我们知道数组一旦创建时不可更改的,所以每一次进行字符串的拼接都是在new一个新的字符串进行添加,这样的话对内存的消耗极大在jdk1.0开始出现了stringbuffer优化创建对象的形式是在堆内存中存放的所以为了确保安全性stringbuffer添加了大量的重量锁(synchronize)由于加锁的原因导致了他的效率并不是太高,在jdk1.5之后又诞生了一个新的string的优化stringbuilder取消了大量的重量锁(synchronize)提高了效率但是导致了线程不安全。看情况进行使用

stringbuffer

jdk1.0诞生的stringbuffer,它是对字符串进行的拼接对内存的消耗小,内部提供了append()方法。当数据到达一定的量就会触发扩容。初始容量为16 每一次扩容都会length*2+2。可能会有有人问到为什么要加2,因为这个初始容量是可以设定的如果初始容量设置为0不进行加2永远都是0。每一次进行拼接字符串的过程中都有重量锁(synchronize)所以效率比较低

stringbuilder

jdk1.5诞生的stringbuilder,他和stringbuffer的操作是一样的只不过后来减少了重量锁的所以提高了效率但是这也导致了线程的不安全看业务需求选择使用buffer或者builder。

优质内容筛选与推荐>>
1、HDU 1222 Wolf and Rabbit
2、抽象类和接口以及二者的区别
3、c# 窗体位置任意调
4、面试时常遇到的数组面试题
5、jQuery中的DOM操作


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号