ArrayList源代码中的
private transient E[] elementData;
声明为transient,为什么还可以序列化成功呢?
ArrayList重写了
private voidwriteObject(java.io.ObjectOutputStream s)throwsjava.io.IOException{int expectedModCount =modCount;//Write out element count, and any hidden stuff
s.defaultWriteObject();//Write out array length
s.writeInt(elementData.length);//Write out all elements in the proper order.
for (int i=0; i
s.writeObject(elementData[i]);if (modCount !=expectedModCount) {throw newConcurrentModificationException();
}
}
在使用ObjectOutputStream序列化对象时会调用这个writeObject方法。
第二个问题是为什么要声明为transient呢?
在google了下,发现主流说法如下:
ArrayList实现了java.io.Serializable接口,所以ArrayList对象可以序列化到持久存储介质中。ArrayList的主要属性定义如下:* private static final long serialVersionUID = 8683452581122892189L;* private transientObject elemen