【Java】JDK源码分析——StringBuilder

一.概述

StringBuilder是java中用来处理字符串的类。不同于String,StringBuilder保存的字符串可以进行修改,拼接,删除等操作。StringBuilder是线程不安全的。
StringBuilder.java中的相关代码:

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

1.StringBuilder被final修饰,不能被继承。
2.继承了AbstractStringBuilder,StringBuilder中的方法基本都是通过AbstractStringBuilder实现。
3.实现了java.io.Serializable接口,可以进行序列化。
4. 实现了CharSequence接口,可以将字符串当成一个一个的字符处理。

二.源码分析

1.全局变量

StringBuilder.java中的相关代码:

static final long serialVersionUID = 4383685877147921099L;

StringBuilder中只有一个全局变量serialVersionUID,用于序列化。

2.常用的构造方法

1)无参数

StringBuilder.java中的相关代码:

	public StringBuilder() {
    	super(16);
	}

默认情况下,调用构造方法,会调用父类的构造方法,分配一个容量为16个字符空间。

2)参数为int

StringBuilder.java中的相关代码:

    public StringBuilder(int capacity) {
        super(capacity);
	}

调用父类方法,指定需要分配的空间的大小来进行分配。

3)参数为String

StringBuilder.java中的相关代码:

	public StringBuilder(String str) {
    	// 分配空间
        super(str.length() + 16);
        // 保存字符串
        append(str);
	}

调用父类的方法,为字符串分配空间,同时再多分配出来16个字符大小的空间,防止之后字符串长度发生改变;保存字符串。

3.append方法

在当前字符串后拼接一个字符串。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder append(Object obj) {
        return append(String.valueOf(obj));
	}

调用了参数为String的重载方法。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder append(String str) {
        super.append(str);
        return this;
	}

调用父类的方法append方法,返回。
其它参数类型的append方法,也都是通过调用父类的append方法实现。

4.delete方法

删除指定长度的字符串。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder delete(int start, int end) {
        super.delete(start, end);
        return this;
	}

调用父类的delete方法,返回。

5.replace方法

将原字符串中start和end之间的字符替换为str。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder replace(int start, int end, String str) {
        super.replace(start, end, str);
        return this;
	}

调用父类的replace方法,返回。

6. insert方法

在原字符串offset位置插入字符串str。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder insert(int offset, String str) {
        super.insert(offset, str);
        return this;
	}

调用父类的insert方法,返回。
其它参数形式的insert方法,也都是通过调用父类的insert方法实现。

7.indexOf方法

返回源字符串中str字符串首次出现的位置。
StringBuilder.java中的相关代码:

    @Override
    public int indexOf(String str) {
        return super.indexOf(str);
	}

调用并返回父类的indexOf方法。
其它参数形式的indexOf方法,也都是通过调用父类的indexOf方法实现。

8.reverse方法

将字符串进行反转。
StringBuilder.java中的相关代码:

    @Override
    public StringBuilder reverse() {
        super.reverse();
        return this;
	}

调用父类的reverse方法,返回。

9.toString方法

将StringBuilder对象转换为String对象。
StringBuilder.java中的相关代码:

    @Override
    public String toString() {
        return new String(value, 0, count);
	}

创建并返回新的String对象。

10.writeObject方法

对StringBuilder对象进行序列化。
StringBuilder.java中的相关代码:

    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException {
        s.defaultWriteObject();
        // 保存当前已经使用的空间大小
        s.writeInt(count);
        // 保存当前的字符数组
        s.writeObject(value);
	}

11.readObject方法

对StringBuilder对象进行反序列化。
StringBuilder.java中的相关代码:

    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        s.defaultReadObject();
        // 获取已经使用的空间大小
        count = s.readInt();
        // 获取保存的字符数组
        value = (char[]) s.readObject();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值