وقتی کلاس شما Serializable interface را پیاده سازی می کند، کلاس شما باید حاوی یک فیلد static و final از نوع long با نام serialVersionUID باشد و اگر شما این فیلد را تعریف نکنید JVM این فیلد را تعریف و بر اساس الگوریتم داخلی خود مقدار دهی خواهد کرد.
serialization runtime در جاوا برای هر کلاس serializable یک version number در نظر می گیرد که به آن serialVersionUID می گوید. این عدد در فرایند deserialization برای چک کردن اینکه فرستنده و گیرنده با هم سازگار هستند استفاده می شود. در صورتی که کلاس serialize شده ای که به مقصد رسیده serialVersionUID متفاوتی با کلاس serializable موجود در مقصد داشته باشه در فرایند deserialization خطای InvalidClassException رخ می دهد.
حالا اگه فیلد serialVersionUID تعریف نشه چه اتفاق بدی ممکنه بیوفته؟ مگه JVM خودش اگه این نباشه مقدار دهیش نمی کنه؟
serialVersionUID پیش فرضی که توسط JVM تولید میشه ممکنه برای یک کلاس، در پیاده سازی های مختلف JVM متفاوت باشه برای مثال اگه بر روی یک ماشین از Oracle JVM استفاده بشه و روی ماشین دیگه از IBM JVM یا JRockit استفاده بشه ممکنه در فرآیند deserialization به خطای InvalidClassException برخورد کنیم.
در حالت کلی توصیه میشه که برای بوجود نیامدن این مشکلات در فرآیند deserialization بهتر است که فیلد serialVersionUID تعریف و مقداردهی بشود.