一次性搞清楚equals和hashCode
在程序设计中,有很多的“公约”,遵守约定去实现你的代码,会让你避开很多坑,这些公约是前人总结出来的设计规范。 Object类是Java中的万类之祖,其中,equals和hashCode是2个非常重要的方法。 这2个方法总是被人放在一起讨论。最近在看集合框架,为了打基础,就决定把一些细枝末节清理掉。一次性搞清楚! 下面开始剖析。 public boolean equals(Object obj) Object类中默认的实现方式是 : return this == obj 。那就是说,只有this 和 obj引用同一个对象,才会返回true。(如果我们没有重写equals方法,equals和==一样比较的都是内存地址,只是equals可以让我们重写。) 而我们往往需要用equals来判断 2个对象是否等价,而非验证他们的唯一性。这样我们在实现自己的类时,就要重写equals. 按照约定,equals要满足以下规则。 自反性 : x.equals(x) 一定是true 对null : x.equals(null) 一定是false 对称性 : x.equals(y) 和 y.equals(x)结果一致 传递性: a 和 b equals , b 和 c equals,那么 a 和 c也一定equals。 一致性: 在某个运行时期间