本文涉及到的概念 1.为什么重载equals方法时,要遵守通用约定 2.重载equals方法时,要遵守哪些通用约定   为什么重载equals方法时,要遵守通用约定 Object类的非final方法都有明确的通用约定,这些方法是被设计成被重载的.重载时,如果不遵守通用约定,那么,其它依赖于这些通用约定的类(例如HashMap和HashSet)就无法结合该类一起正常工作----<<effective java>>     quals方法实现了等价关系,重载时要遵守的通用约定: a.自…
1)自反性 对于任何非null的引用值x,x.equals(x)必须返回true.---这一点基本上不会有啥问题 2)对称性 对于任何非null的引用值x和y,当且仅当x.equals(y)为true时,y.equals(x)也为true. JDK中就有这样的错误.如java.sql.Timestamp对java.util.Date进行了扩展,并且增加了nanoseconds域.Timestamp的equals方法就违反了对称性. 下面我们来分析下这个方法 //Date.java public…
覆盖equals方法时请遵守通用约定   覆盖equals方法看起来很简单,但是有许多覆盖方式会导致错误,并且后果很严重.最容易避免这种类问题的方法就是不覆盖equals方法,在这种情况下,类的每个实例都只能与它自己相等.如果满足了一下任何一个条件,这都是所谓期望的结果: 类的每个实例的本质上都是唯一的.对于代表活动实体而不是值的类来说确实如此,例如Thread.Object提供的equals实现对于这些类来说正式正确的行为. 不关心类是否提供了"逻辑相等"的测试功能.例如java.u…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 11. 重写equals方法时同时也要重写hashcode方法 在每个类中,在重写 equals 方法的时侯,一定要重写 hashcode 方法.如果不这样做,你的类违反了…
建议45: 覆写equals方法时不要识别不出自己 我们在写一个JavaBean时,经常会覆写equals方法,其目的是根据业务规则判断两个对象是否相等,比如我们写一个Person类,然后根据姓名判断两个实例对象是否相同,这在DAO(Data Access Objects)层是经常用到的.具体操作是先从数据库中获得两个DTO(Data Transfer Object,数据传输对象),然后判断它们是否是相等的,代码如下: class Person{ private String name; pub…
这是我在项目中犯的一个低级错误: 使用equals方法时,要注意这个方法是boolean java.lang.String.equals(Object anObject)传递的是Object,所以传任何值都不报错: 案例:     status = dao.getStatus();       if ("1".equals(status))        {            ss = "1";        }        else        {    …
Object类的hashCode方法: public native int hashCode();   是一个本地方法. 其中这个方法的主要注释如下: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no…
1.背景知识 本文代码基于jdk1.8分析,<Java编程思想>中有如下描述: 另外再看下Object.java对hashCode()方法的说明: /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * <p> *…
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)  和…