您的位置:首页 > 编程语言 > Java开发

java重写equals方法以及hashcode方法

2016-08-24 10:48 411 查看
equals方法重写需要注意以下几点:
1:自反性:对任意x,x.equals(x)一定返回true。
2:对称性:对任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true。
3:传递性:对任意的x,y,和,z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)也一定返回true。
4:一致性:对任意的x和y,如果对象中用于等价比较的信息没有改变,那么无论调用多少次x.equals(y),返回的结果都是一致的。
5:对于任何不是null的x,x.equals(null)一定返回false。
在string类中,利用equals()方法判断两个字符串是否相等的标准和==不一致,因为在equals()方法中只需要比较两个字符串的值是否一致就可以了,而==则是要根据hashcode来进一步判断。
object默认提供的equals()方法只是比较两者的地址,所以object类的equals()方法比较的结果和==的结果完全相同,因此在实际应用中通常需要重写equals()方法。下面就从几个比较常见的方法中介绍需要重写equals()方法的实例,不过还是要想介绍一下hashcode()方法,object类的hashcode()方法是根据对象地址来计算,即根据(System.identityHshCode(Object x)方法的计算结果相同)。
,不过一般情况之下,都是要重写hashcode()方法,不再让她计算地址的值。
需要重写的地方通常在java集合那一部分,集合的重写基本上都是同一种方式,其实也可以延伸到很多领域,重写的代码如下:


public boolean equals(Object obj){
if(this==obj)
return true;
if(obj!=null&&obj.getClass()==R.class){
R r=(R)obj;
return true;
}
return false;
}
public int hashcode()
{
return 1;
}


这是一种方式,也是最常见的方式,总是把hashcode的值弄成一致,这样就只会比较equals()方法,上面的代码,R的意思是类R。
下面还有一种方式,来表示出hashcode的值,还是先给出hashcode()方法重写的规则比较好,如下:
1:在程序运行过程中,同一个对象多次调用hashcode方法,返回的值是一样的。
2:当两个对象通过equals方法比较返回true时,这两个hashcode返回的值也应该是一致的。
3:对象中用于equals()方法比较标准的实例变量,都应该用云计算hashcode值。
下面是重写hashcode()方法的一般步骤:
1:把对象中每个有意义的实例变量,计算出一个int值,计算方式我就不列举了,请自己上网搜一下吧。
2:用第一步计算的多个值组合计算出一个hashcode值并返回,为了避免恰好相等的情形出现,一般写成:return f1.hashCode()*19+(int)f2*31;都是质数。就不列举了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java equals hashcode