ArrayList 中 elementData 为什么使用 transient 修饰?
transient Object[] elementData;
由于 ArrayList 是基于动态数组实现的,所以并不是所有的空间都被使用。因此使用了 transient 修饰,不会被虚拟机进行默认的序列化。虽说不会被jvm默认序列化,但ArrayList自定义了序列化。看下源代码,它序列化的长度为size
。再看下size
的定义
定义为其包含的元素的个数
,说明不是ArrayList动态扩容后的length。综上所述,ArrayList只序列化实际存储元素的那部分。