(Item 7) Override equlas()
1) Use == to check “this”
2) Use instanceof to check type
3) Cast argument to correct type
4) Check equality of each significant fields
5) Ask yourself, Is it symmetric, transitive, consistent ?
Caveats:
Override hashCode() when you override equals()
Don’t be too clever
Don’t rely on unreliable resources
Don’t overload equals(), you should override it! (counter example: public Boolean equals(MyClass o) )
Simple Example:
public final class PhoneNumber {
private final short areaCode;
private final short exchange;
private final short extension;
public PhoneNumber(int areaCode, int exchange,
int extension) {
this.areaCode = (short) areaCode;
this.exchange = (short) exchange;
this.extension = (short) extension;
}
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof PhoneNumber))
return false;
PhoneNumber pn = (PhoneNumber)o;
return pn.extension == extension &&
pn.exchange == exchange &&
pn.areaCode == areaCode;
}
//...
}