请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 557|回复: 0

Java面试题集18(核心部分)——《疯狂Java讲义》附赠

[复制链接]
发表于 2018-6-2 16:40:56 | 显示全部楼层 |阅读模式
本文随《疯狂Java讲义》光盘附赠
京东购买地址:https://item.jd.com/12261787.html
当当购买地址:http://product.dangdang.com/23532609.html
35、序列化接口的版本号(id)有什么用?
反序列化Java对象时必须提供该对象的class文件,现在的问题是随着项目的升级,系统的class文件也会升级,Java如何保证两个class文件的兼容性?
Java序列化机制允许为序列化类提供一个private static final long类型的serialVersionUID值,该Field值用于标识该Java类的序列化版本,也就是说如果一个类升级后,只要它的serialVersionUID值保持不变,序列化机制也会把它们当成同一个序列化版本。
通常建议程序员为序列化类指定serialVersionUID指定值!如果程序员没有为序列化类的serialVersionUID指定值,系统会该序列化类的serialVersionUID自动分配一个值。无论程序员对该类进行了怎样怎么样的修改(即使该修改对序列化没有任何影响),系统也会自动修改serialVersionUID的值;如果程序员主动为序列化类的serialVersionUID分配值,则可以控制只有对该类的修改影响序列化机制才去修改serialVersionUID值。
36hashCode()方法的作用?
hashCode()方法与equals()方法相似,都是来自java.lang.Object类的方法,都允许用户定义的子类重写这两个方法。
一般来说,equals()这个方法是给用户调用的,如果你想根据自己的业务规则来判断两个对象是否相等,你可以重写equals()方法。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,两个对象是不是相等。
而hashCode()方法通常是给其他类来调用的,比如当我们要把两个对象放入HashSet时,由于HashSet要求两个对象不能相等,而HashSet判断两个对象是否相等的标准是通过equals()比较返回false、或两个对象的hashCode()方法返回值不相等——只要满足任意一个条件都可会认为两个对象不相等。
从这个角度来看,我们可以把hashCode()方法的返回值当成这个对象的“标识符”,如果两个对象的hashCode()相等,即可认为这两个对象是相等的。因此当我们重写一个类的equals()方法时,也应该重写它的hashCode()方法,而且这两个方法判断两个对象相等的标准也应该是一样的。

您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

微信群请扫二维码
QQ交流1群:
545923995
(未满)

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2020-2-22 02:51 , Processed in 0.186244 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表