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方法
- 为什么要重写java中对象的equals方法和hashCode方法以及如何重写
- Java 中equal() 方法与==的区别以及 equals()与 hashCode()方法重写
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
- java 重写HashCode和equals方法以及 HashMap集合 增 删 改 查
- Java中重写Object类的equals方法和Hashcode方法的注意事项
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- equals和hashCode方法重写 以及hibernate的联合主键生成策略的生成类的生成
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- Java中关于==和equal的区别以及equals()方法重写
- java 重写类的equals方法和hashcode方法
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
- 关于重写equals,hashcode以及compareTo方法!
- Java中重写Object类的equals方法和 hashcode方法的注意事项
- java重写equals和hashCode方法
- HashCode的作用 以及重写equals方法为什么要重写HashCode方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法说明