您现在的位置是:首页 > 文章详情

我看JAVA 之 AbstractStringBuilder & StringBuffer & StringBuilder

日期:2019-12-22点击:332

我看JAVA 之 AbstractStringBuilder & StringBuffer & StringBuilder

注:基于jdk11

AbstractStringBuilder

可变的抽象字符串创建类 

实现了如下几个接口:

1. Appendable 此接口的实现类可以拼接字符序列或单个字符。不保证线程安全,由实现类实现是否线程安全。使用java.util.Formatter格式化,必须为Appendable实现类 2. CharSequence 

几个重要的成员变量:

/** * 字符串存储数据的字节数组,初始化的时候可以指定容量,默认为16 */ byte[] value; /** * 编码 0为Latin1 1为Utf-16 */ byte coder; /** * 当前字符串实际长度 */ int count; private static final byte[] EMPTYVALUE = new byte[0]; /** * byte [] 最大长度限制,超过VM限制长度会导致OOM */ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 

几个重要的方法:

1. 返回当前字符串实际长度,count public int length() { return count; } 2. 返回字符串容量 public int capacity() { return value.length >> coder; } 3. 扩容,字节数组拷贝 public void ensureCapacity(int minimumCapacity) { if (minimumCapacity > 0) { ensureCapacityInternal(minimumCapacity); } } private void ensureCapacityInternal(int minimumCapacity) { // overflow-conscious code int oldCapacity = value.length >> coder; if (minimumCapacity - oldCapacity > 0) { value = Arrays.copyOf(value, newCapacity(minimumCapacity) << coder); } } private int newCapacity(int minCapacity) { // overflow-conscious code int oldCapacity = value.length >> coder; int newCapacity = (oldCapacity << 1) + 2; if (newCapacity - minCapacity < 0) { newCapacity = minCapacity; } int SAFE_BOUND = MAX_ARRAY_SIZE >> coder; return (newCapacity <= 0 || SAFE_BOUND - newCapacity < 0) ? hugeCapacity(minCapacity) : newCapacity; } private int hugeCapacity(int minCapacity) { int SAFE_BOUND = MAX_ARRAY_SIZE >> coder; int UNSAFE_BOUND = Integer.MAX_VALUE >> coder; if (UNSAFE_BOUND - minCapacity < 0) { // overflow throw new OutOfMemoryError(); } return (minCapacity > SAFE_BOUND) ? minCapacity : SAFE_BOUND; } 

StringBuffer

线程安全的AbstractStringBuilder实现类 

几个重要的方法:

1. toString() 使用缓存机制,在第一次调用toString()的时候会将实时生成的字符串拷贝保存在toStringCache中,下次调用直接返回,如有变化,toStringCache置空 

StringBuilder

非线程安全的AbstractStringBuilder实现类 

几个重要的方法:

1. toString() 实时创建字符串拷贝返回
原文链接:https://yq.aliyun.com/articles/740271
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章