stringbuilder源码

admin 34 0

StringBuilder的源码解析

在Java中,StringBuilder是一个可变的字符序列,主要用于处理字符串,与String不同,StringBuilder的各个字符操作方法(如append、insert、delete等)都是非同步的,因此其执行效率更高,适用于需要大量修改字符串的场景。

我们将深入探讨StringBuilder的源码实现。

一、StringBuilder的初始化

StringBuilder的初始化有两种方式:一种是直接通过构造函数传入一个字符串,另一种是通过默认构造函数初始化一个空的StringBuilder。

1. 构造函数:StringBuilder(String str)

public StringBuilder(String str) {
    value = str.value;
    count = str.count;
}

value是字符数组,用于存储StringBuilder中的字符,count是当前StringBuilder中字符的数量。

2. 默认构造函数:StringBuilder()

public StringBuilder() {
    value = new char[40]; // 初始化一个长度为40的字符数组
    count = 0; // 初始时,字符数量为0
}
二、append方法

append方法是StringBuilder中最重要的方法之一,用于向StringBuilder中添加字符,其源码实现如下:

public StringBuilder append(String str) {
    if (str == null) {
        appendNull(); // 如果字符串为null,调用appendNull方法处理
    } else {
        int len = str.length(); // 获取字符串的长度
        int newCount = count + len; // 计算新的字符数量
        if (newCount > value.length) { // 如果新的字符数量超过了当前字符数组的长度,需要扩容
            char[] newValue = new char[newCount * 2]; // 创建一个新的字符数组,长度为当前字符数组的两倍
            System.arraycopy(value, 0, newValue, 0, count); // 将旧字符数组中的内容复制到新字符数组中
            value = newValue; // 更新字符数组的值
        }
        str.getChars(0, len, value, count); // 将新字符串中的字符复制到字符数组中,并更新字符数量
        count = newCount; // 更新字符数量
    }
    return this; // 返回当前StringBuilder对象,支持链式调用
}
三、其他常用方法解析

1. insert(int index, String str):在指定位置插入一个字符串,实现方式与append方法类似,需要判断是否需要扩容。

2. delete(int start, int end):删除指定范围内的字符,实现方式是将删除范围内的字符复制到后面的位置,然后更新字符数量。

3. replace(int start, int end, String str):将指定范围内的字符替换为另一个字符串,实现方式与delete方法类似,先删除再插入。

4. reverse:将StringBuilder中的字符反转,实现方式是使用两个指针从头和尾部向中间遍历,交换对应位置的字符。