关于类的equals和hashcode方法
当我们想要改写equals方法的时候,总是应该打起12分的精神,不然稍不留神,就能跑出来一些让你抓狂的错误。
先看个例子:
package general;import static java.lang.System.out;import java.util.HashMap;import java.util.HashSet;import java.util.Set;public class TestEffective { public static void testEqualsValue() { PhoneNumber a = new PhoneNumber(755, 4397681, "calvin"); PhoneNumber c = new PhoneNumber(755, 4397681, "calvin"); out.println(a.equals(c)); Set s = new HashSet(); s.add(a); s.add(c); out.println(s.size()); HashMap<PhoneNumber, String> h = new HashMap<PhoneNumber, String>(); h.put(new PhoneNumber(755, 4397681, "calvin"), "my number"); out.println(h.get(new PhoneNumber(755, 4397681, "calvin"))); } public static void main(String args[]) { testEqualsValue(); }}class PhoneNumber { int area; int number; String name; public PhoneNumber(int area, int number, String name) { super(); this.area = area; this.number = number; this.name = name; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof PhoneNumber)) { return false; } PhoneNumber oPhone = (PhoneNumber) obj; if (this.area == oPhone.area && this.number == oPhone.number && (oPhone.name == null ? this.name == null : this.name .equals(oPhone.name))) { return true; } else { return false; } } // @Override // public int hashCode() { // int result=17; // result=37*result+area; // result=37*result+number; // return result; // }}