做用:html
serialVersionUID 是用來在序列號運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,若是相同就認爲是一致的,能夠進行反序列化,不然就會出現序列化版本不一致的異常。java
沒定義時默認生成:ui
當實現java.io.Serializable接口的實體(類)沒有顯式地定義一個名爲serialVersionUID,類型爲long的變量時,Java序列化機制會根據編譯的class(它經過類名,方法名等諸多因素通過計算而得,理論上是一一映射的關係,也就是惟一的)自動生成一個serialVersionUID做序列化版本比較用,這種狀況下,若是class文件(類名,方法明等)沒有發生變化(增長空格,換行,增長註釋,等等),就算再編譯屢次,serialVersionUID也不會變化的..net
顯式定義的做用:htm
若是咱們不但願經過編譯來強制劃分軟件版本,即實現序列化接口的實體可以兼容先前版本,未做更改的類,就須要顯式地定義一個名爲serialVersionUID,類型爲long的變量,不修改這個變量值的序列化實體均可以相互進行串行化和反串行化。不一樣的成員變量會用默認值代替。blog
http://www.cnblogs.com/guanghuiqq/archive/2012/07/18/2597036.html接口
http://blog.csdn.net/z69183787/article/details/46834423io