源码解析+代码演示:为什么使用StringBuffer和StringBuilder类型对字符串进行操作,内存地址不会变

本文详细解析了StringBuffer和StringBuilder在进行字符串操作时内存地址不变的源码原因,通过源码分析和代码演示,揭示了它们如何通过内部扩容和System.arraycopy()方法保持内存地址的连续性。
摘要由CSDN通过智能技术生成

源码解析:为什么使用StringBuffer和StringBuilder类型对字符串进行操作,内存地址不会变

1. 源码解析
2. 代码演示

源码解析

直接上源码(以append操作为例),咱们一行行来看 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200702115305283.png) 这里先确定了输入的char[]数组的长度( int len = str.length;)

并根据长度使用ensureCapacityInternal()方法创建了一个新的扩容后的数组(如下),这就是对StringBuffer和StringBuilder类型自动扩容的实现
在这里插入图片描述
接下来使用System.arraycopy()方法:
将原数组中的内容复制到通过ensureCapacityInternal()方法扩容后的新数组中,并将新数组的地址值改为原数组的地址。

这就是为什么地址值不变的原因!!!

System.arraycopy()方法的源码解释:

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值