知识点——Java基础

58 阅读1分钟

ArrayList的数组为什么用transient修饰?

arraylist中的数据存放在数组elementData中,elementData用transient修饰表示序列化时不会序列化数组。那arraylist的数据是怎么序列化的呢?arraylist重写了readObject()和writeObject()方法,在这两个方法中序列化数组中的元素。这两个方法是private的,arraylist实现了Seriable接口,在序列化和反序列化时,ObjectInputStream和ObjectOutoutStream通过反射调用arraylist重写的方法。 那为什么要重写readObject和writeObject方法,而不直接序列化elementData数组呢?因为数组的长度比实际存放的元素要大,如果直接序列化,会将空值也序列化了,浪费空间。