StringBuilder类

在使用StringBuilder时遇到问题,发现传入int型变量到构造函数并非预期的追加操作,而是初始化长度。StringBuilder的构造函数会根据参数创建指定长度的数组,而无参构造函数默认长度为16。它继承自AbstractStringBuilder,实现了Appendable和CharSequence接口。当需要追加的内容超过当前数组长度时,StringBuilder会进行扩容,扩容策略为2倍+2或者直接扩大到所需长度,确保不超过int最大值。对于不同类型的参数,如字符串或字符数组,StringBuilder会有不同的追加实现。
摘要由CSDN通过智能技术生成

今天用StringBulider的时候被坑到了,想着它的构造和append方法一样可以传一个int型的变量进去:于是写下了大概这样的代码:

int i= 1;
StringBuilder sb = new StringBuilder(i);

用的在线编译器也没报错就是结果怎么也不对。调了半天才发现如果传入一个int值则代表初始化长度。。。那句话其实应该这样写

    StringBuilder sb = new StringBuilder(""+i);

点进它的构造函数发现无参的默认长度是16有参的调用AbstractStringBuilder类的构造。

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

AbstractStringBuilder该类实现了Appendable, CharSequence接口。
有参的构造其实就是建立了一个长度为capacity的数组

AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

最大长度是int的最大值-8

    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

观察连接以及扩容方式以String类型为例:

    public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值