Java的serialization提供了一種持久化對象實例的機(jī)制帅刊。當(dāng)持久化對象時,可能有一個特殊的對象數(shù)據(jù)成員漂问,我們不想用serialization機(jī)制來保存它赖瞒。為了在一個特定對象的一個域上關(guān)閉serialization,可以在這個域前加上關(guān)鍵字transient蚤假。當(dāng)一個對象被序列化的時候栏饮,transient型變量的值不包括在序列化的表示中,然而非transient型的變量是被包括進(jìn)去的磷仰。
那到底什么時候使用這個關(guān)鍵字呢袍嬉?
HashMap中的table中存儲的值數(shù)量是小于數(shù)組的大小的(數(shù)組擴(kuò)容的原因),這個在元素越來越多的情況下更為明顯芒划。如果使用默認(rèn)的序列化冬竟,那些沒有元素的位置也會被存儲,就會產(chǎn)生很多不必要的浪費民逼。
由于 ArrayList 是基于動態(tài)數(shù)組實現(xiàn)的泵殴,所以并不是所有的空間都被使用。因此使用了 transient 修飾拼苍,可以防止被自動序列化笑诅。
transient Object[] elementData;