hashcode和equlas、==的一些区别

来源:互联网 发布:手机淘宝黑了 编辑:程序博客网 时间:2024/05/09 20:51
---------------------- android培训、java培训、期待与您交流! ----------------------

分析:“==”“equals”“hashCode”
1.'=='是用来比较两个变量(基本类型和对象类型)的值是否相等的,如果两个变量是基本类型的,直接比较值。如果两个变量是对象类型的,比较的是这两个对象在栈中的引用(即地址)。'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 
2.在Object类中如果没有重写equals方法,equals和==也就相当于一样的。 
3.通常要重写equals方法,因为比较对象的内容比比较对象的引用(地址)要好理解更易懂。
4.在Object类中如果没有重写hashCode那么任何对象的hashCode都是不相等的。

5.通常在集合类的时候需要重写hashCode方法和equals方法,如果需要给集合类添加对象,在添加之前需要查看给集合里是否已经有了该对象,一般情况下用hashCode来比较。

6.当对象的基本数据类型值相同,那么hashCode就一定相同。

7.equals()相等的两个对象,hashcode()一般是相等的;equals()方法不相等的两个对象,hashcode()有可能相等。
8.hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。因为在object类中hashcode()方法是返回的是对象的引用(地址值),equals()方法比较的也是两个对象的引用(地址值),如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了。 

9.hashCode就好比字典里每个字的索引,equals()好比比较的是字典里同一个字下的不同词语。就好像在字典里查“自”这个字下的两个词语“自己”、“自发”,如果用equals()判断查询的词语相等那么就是同一个词语,比如equals()比较的两个词语都是“自己”,那么此时hashCode()方法得到的值也肯定相等)
(hashcode()不等,一定能推出equals()也不等) 
---------------------- android培训、java培训、期待与您交流! ----------------------
原创粉丝点击