博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdk1.8源码(四) - StringBuilder类 和 StringBuffer类
阅读量:6633 次
发布时间:2019-06-25

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

StringBuiler和StringBuffer的定义

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

通过代码,我们可以看到他们都是继承了AbstractStringBuilder类 ,他们之前的区别就在于StringBuffer在重写父类的方法时,都加了synchronized关键字。然后都是直接调用父类的方法。所以接下来我们介绍AbstractStringBuilder类。注:当创建StringBuffer和StringBuilder时,默认长度是 16 

AbstractStringBuilder 的属性

char[] value;//数组用的长度int count;private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

可以看到,本质上还是char数组。

AbstractStringBuilder.append(String str)方法

public AbstractStringBuilder append(String str) {        if (str == null)            return appendNull();        int len = str.length();        ensureCapacityInternal(count + len);        str.getChars(0, len, value, count);        count += len;        return this; }private void ensureCapacityInternal(int minimumCapacity) {        // overflow-conscious code        if (minimumCapacity - value.length > 0) {            value = Arrays.copyOf(value,                    newCapacity(minimumCapacity));        }}private int newCapacity(int minCapacity) {        // overflow-conscious code        int newCapacity = (value.length << 1) + 2; //左移        if (newCapacity - minCapacity < 0) {            newCapacity = minCapacity;        }        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)            ? hugeCapacity(minCapacity)            : newCapacity;    }

主要说下。当添加一个字符串时,会事先判断append后的长度是否大于的当前char数组声明的长度,如果大于,则动态扩容,扩容后的长度是 根据需要的长度(minCapacity) 或者 先原本长度的 2倍 +2 ,两个比较取小的那个。

 

转载于:https://www.cnblogs.com/dengyu/p/10221043.html

你可能感兴趣的文章
在(CListView)列表视图中添加右键菜单的方法
查看>>
解决IE6-IE7下li上下间距
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
Post请求
查看>>
Java排序算法(三):直接插入排序
查看>>
Python 列表 min() 方法
查看>>
【死磕jeesite源码】Jeesite配置定时任务
查看>>
TBluetoothLEDevice.UpdateOnReconnect
查看>>
poj3517
查看>>
iphone http下载文件
查看>>
poj 1195:Mobile phones(二维树状数组,矩阵求和)
查看>>
Using JRuby with Maven
查看>>
一名女程序员对iOS的想法
查看>>
Spring Websocket实现文本、图片、声音、文件下载及推送、接收及显示(集群模式)...
查看>>
最严新规发布 网络短视频平台该如何降低违规风险? ...
查看>>
云服务器ECS出现速度变慢 以及突然断开怎么办?
查看>>
208亿背后的“秘密”
查看>>
Android系统自带样式(android:theme)解析
查看>>
全志A33开发板Linux内核定时器编程
查看>>