Представьте, что у вас есть класс с именем Foo, и у него НЕТ serialversionuid (по умолчанию), и вы сериализовали экземпляр Foo дляфайл.Позже вы добавите несколько новых членов в класс Foo.Если вы попытаетесь десериализовать объект Foo из файла, вы получите ошибку сериализации, сообщающую, что объекты несовместимы.Они несовместимы, это то, что вы хотите, и по умолчанию.Они несовместимы, потому что новые члены в классе Foo не могут быть инициализированы из старого сериализованного экземпляра Foo.
Теперь вы можете сказать: «Мне все равно, в моем приложении допустимо, чтобы эти полябыть неинициализированным ".Если это действительно так, вы можете установить serialversionuid класса NEW Foo таким же, как класс OLD Foo.Это скажет Java, что объекты совместимы в отношении сериализуемости, и Java не будет жаловаться, когда вы десериализуете старый экземпляр Foo в новый класс Foo (но новые поля все равно будут неинициализированы).
Если высоздаете новый класс в первый раз, и вы устанавливаете serialversionuid, ВЫ ВХОДИТЕ В КОНТРАКТ.Вы говорите: «Для всех будущих версий этого класса с одним и тем же serialversionuid я гарантирую, что они совместимы в отношении состояния и сериализации».
Если вы измените класс, и вы явно хотите отключить десериализациюстарых версий вы можете изменить serialversionuid на новое значение.Это вызовет исключение, если попытаться десериализовать старый объект в новый экземпляр класса.