重写equals方法的约定】的更多相关文章

1. 什么时候需要重写Object.equals方法 如果类具有自己特有的“逻辑相等”概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. 这通常属于“值类(value class)”的情形.值类仅仅是一个表示值的类,例如Integer或Date.程序员在利用equals方法来比较值对象的引用时,希望知道它们在逻辑上是否相等,而不是想了解它们是否指向同一个对象. 有一种“值类”不需要覆盖equals方法,即用实例受控确保“每个值至多只…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr…
转自:http://blog.csdn.net/renfufei/article/details/14163329 翻译人员: 铁锚 翻译时间: 2013年11月5日 原文链接: Java hashCode() and equals() Contract for the contains(Object o) Method of Set 本文主要讨论 集合Set 中存储对象的 hashCode 与 equals 方法应遵循的约束关系. 新手对Set中contains()方法的疑惑 [java] v…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 11. 重写equals方法时同时也要重写hashcode方法 在每个类中,在重写 equals 方法的时侯,一定要重写 hashcode 方法.如果不这样做,你的类违反了…
equals方法是我们日常编程中很常见的方法,Object中对这个方法的解释如下: boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”. 查看该方法的底层代码如下: public boolean equals(Object obj) { return (this == obj); } 通过上面的代码很容易就能看出来,Object的equals方法上是用来比较两个实例是否为同一个实例对象,底层还是依赖于==的判断. 2.4.1.1 什么情况下无需覆盖equa…
1 equals方法 Object类中默认的实现方式是  :   return this == obj  .那就是说,只有this 和 obj引用同一个对象,才会返回true. 而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性.这样我们在实现自己的类时,就要重写equals. 按照约定,equals要满足以下规则. 自反性:  x.equals(x) 一定是true 对null:  x.equals(null) 一定是false 对称性:  x.equals(y)  和…
一.equals方法和hashcode的关系 根据Object.hashCode的通用约定: 如果两个对象相同(equals方法返回true),那么hashcode也相等.(图1) 如果两个对象的hashcode相等,这两个对象不一定相同,因为可能发生了hash冲突.(图2) 啥是hash冲突呢? 举个例子:下图的hash算法为   hashcode = num % 4: 图1 看上图,如果有两个对象都是13(意思也就是指向了同一个对象,那它们的hashcode当然也是相等的啦),所以hashc…
@Override public int hashCode() { return task.getId(); } @Override public boolean equals(Object obj) { if (obj instanceof TaskHandlerTimer) { TaskHandlerTimer oo = (TaskHandlerTimer) obj; if (this.task.getId() == oo.task.getId()) return true; } retur…
package com.wangzhu.map; import java.util.HashMap; /** * hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,<br/> * 这样的散列集合包括HashSet.HashMap以及HashTable.<br/> * 能否可以直接根据hashCode值判断两个对象是否相等呢?<br/> * 答案:肯定是不可以的,因为不同的对象可能会生成相同的hashCode值.<br/> * 虽然不能根据h…
我们都知道Java语言是完全面向对象的,在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object的equals方法,那里的 equals是比较两个对象的内存地址,显然我们new了2个对象内存地址肯定不一样 对于值对象,==比较的是两个对象的值 对于引用对象,比较的是两个对象的地址 默认的equals方法同==,一般来说我们的对象都是引用对象,要重写equ…