为什么StringBuilder中扩容时会+2

StringBuilder在扩容时会将容量翻倍再加2,以避免容量为0的情况并防止在极端情况下发生上溢。当newCapacity小于minCapacity时,会直接使用minCapacity,确保扩容有效。在最大值附近操作时,这一策略能检测到上溢风险。
摘要由CSDN通过智能技术生成

为什么在StringBuilder中扩容时会+2

个人认为主要是有两个原因
1.避免存在value.length为零的情况,此时扩容后newCapacity依然为0

private int newCapacity(int minCapacity) {
        int newCapacity = (value.length << 1) + 2;
        if (newCapacity - minCapacity < 0) {
            newCapacity = minCapacity;
        }
        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
            ? hugeCapacity(minCapacity)
            : newCapacity;
    }

2.在极端情况下也能确保newCapacity上溢后newCapacity - minCapacity < 0为false

int minCapacity = Integer.MAX_VALUE;
//newCapacity在扩容后最大的值为偶数Integer.MAX_VALUE - 1
int newCapacity = Integer.MAX_VALUE - 1 + 2;   
//在最极端的情况下,此时小于号右边结果为1,保证能够检测到newCapacity上溢
System.out.println(newCapacity - minCapacity < 0);
//输出结果为false
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值