How is Serialization id stored in the instance of the object ?
The Serialization id we declare in Java is static field;and static fields are not serialized.
There should be some way to store the static final field then. How does java do it ?
解决方案
The serialVersionUID is not stored in the instance of a "serialized" object, as it is an static field (it is part of the class, not part of the object).
Therefore, it is stored in the compiled bytecode if it is actually defined, otherwise it is computed. In the java specification's words:
If the class has defined serialVersionUID it is retrieved from the class. If the serialVersionUID is >not defined by the class, it is computed from the definition of the class in the virtual machine. If >the specified class is not serializable or externalizable, null is returned.
In the Stream Unique Identifiers section, the algorithm for such computation is explained.
This paragraph is noteworthy (that's why IDEs usually show a warning when a class implementing Serializable has not explicitly defined a serialVersionUID).
Note: It is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected serialVersionUID conflicts during deserialization, causing deserialization to fail.