博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StringBuffer与StringBuilder浅析
阅读量:4213 次
发布时间:2019-05-26

本文共 1112 字,大约阅读时间需要 3 分钟。

1. 为什么要用StringBuffer和StringBuilder?

 

String c = "aaa" +"bbb"与sb.append("aaa").append("bbb")有什么区别,类似这样的问题大家应该都很熟悉,它经常出现在面试题,我想答案大家都已经很清楚,用+会创建多个String,因为String是存放在常量池中的,而且是不可以变的,"aaa"变不成"aaabbb"。反过来问一下,都思考过StringBuffer或者StringBuilder到底怎么实现的?StringBuffer底层数据结构又是怎样的呢?带着这一番问题查看了StringBuffer的源码?

     StringBuffer和StringBuilder都是继承于AbstractStringBuilder,底层的逻辑都包含在这个类中。C中是没有字符串用char[]数组来实现字符串。StringBuffer底层也是char[],数组初始化的时候就定下了大小,如果不断的append肯定有超过数组大小的时候,我们是不是定义一个超大容量的数组,太浪费空间了。就像ArrayList的实现,采用动态扩展,每次append首先检查容量,容量不够就先扩展,然后复制原数组的内容到扩展以后的数组中,就这么简单,别无其他。

public AbstractStringBuilder append(String str) {        if (str == null) str = "null";        int len = str.length();        ensureCapacityInternal(count + len);//查看使用空间满足,不满足扩展空间        str.getChars(0, len, value, count);//getChars就是利用native的array copy,性能高效        count += len;        return this;    }

 

2. StringBuffer和StringBuilder区别?

StringBuffer的操作加上synchronized,而StringBuilder没有高效,如果我们在方法中声明并使用,就是局部变量,不会逃逸出这个方法体使用StringBuilder高效高一些。StringBuffer更适合并发访问的场景

3.如何高效的使用StringBuffer和StringBuilder?

如大概知道String的大小,尽量使用public StringBuffer(int capacity)指定容量,避免更少的动态扩展

 

转载地址:http://vmdmi.baihongyu.com/

你可能感兴趣的文章
人工智能实验 猴子摘香蕉
查看>>
贪心: 独木舟问题
查看>>
python 切片实现trim函数(去除首尾空格)
查看>>
python 用列表生成器 打印杨辉三角
查看>>
python 函数式编程 map、reduce用法
查看>>
python高级特性 sorted(自定义排序)
查看>>
贪心 :多任务执行
查看>>
python 实现系统文件、目录操作
查看>>
python 序列化(JSON)
查看>>
python 多进程
查看>>
python 多线程
查看>>
贪心:huffman编码
查看>>
贪心:dijkstra
查看>>
python 文件读取 read、readline、readlines
查看>>
51nod 1005: 大数加法(含符号)
查看>>
大数四则运算
查看>>
贪心(百练1328):安放雷达(区间问题)
查看>>
NYOJ 括号匹配
查看>>
NYOJ 喷水装置(二)贪心+ 区间覆盖
查看>>
STL max_element、 min_element 用法
查看>>