集合中ArrayList,一直认为,扩容的话,就是从新建了一个对象,然后把新对象的引用重新赋给当前对象,最近想想不对。
1、ArrayList:对象中有两个变量
transientObject[] elementData; 用来存储数据 和private int size;用来记录当前数组长度
2、当我们new ArrayList()的时候,这时我们在内存中开辟了一块ArrayList()的内存空间,注意,这里不是Array的内存空间,本身ArrayList是没有任何意义的,有意义的是他的elementData这个变量
3、当触发扩容的时候,最后是通过System.arraycopy的方式去拷贝数组的,就是说声明一个更大的数组,然后把老数组的元素拷贝到这个新数组中然后实现扩容
4、扩容时这里的elementData的内存地址必然会发生改变(其实我也不太确定)
5、所以,ArrayList()这个内存地址是不会改变的,但是他的内部的elementData是改变的