源码解析:为什么使用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()方法的源码解释: