1、Object类的equals( )
public boolean equals(Object obj) {
return (this == obj);
}
要点:关系运算符 ==,比较内存地址,若两个对象在内存中地址一致,则返回 true 。
2、Integer类的equals( ),其它数值类以此为例
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
要点:数值类比较的已经不是内存地址了,就是单纯的数值。这是“真 · 重写”。
3、String类的equals( )
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value) : StringUTF16.equals(value, aString.value);
}
}
return false;
}
要点:String类也是真·重写,不仅可以比较地址,还可以比较“字符串值”。
4、HashMap的equals( )
public final boolean equals(Object o) {
if (o == this)
return true;
if (o instanceof Map.Entry) {
Map.Entry<?,?> e = (Map.Entry<?,?>)o;
if (Objects.equals(key, e.getKey()) && Objects.equals(value, e.getValue()))
return true;
}
return false;
}