Object 类的equals()、hashCode()
所有的class
最终都继承自Object
。Object
定义了几个重要的方法:
hashCode():是一个
native
方法,计算一个 instance 哈希值1
public native int hashCode();
equals():
return (this == obj);
,判断是否为同一对象。1
2
3public boolean equals(Object obj) {
return (this == obj);
}
equals方法 和 == 的区别
== 比较两个基本数据类型是否相等,或者比较两个引用是否指向同一个对象。
equals 用于比较两个对象是否是同一个对象。
Integer 重写了 equals 方法,拆箱后用双等号判断是否相等。比较 Integer,用equals方法。
String 也重写了 equals 方法,比较两个字符串是否含有相同的字符组合。
重写了 equals 方法,就必须重写 hashCode 方法
重写了 equals 方法,就要重写 hashcode 方法,两个对象相等,他们的 hashcode 要相同。
如果两个对象相等,则 hashcode 一定也是相同的
两个对象相等,对两个对象分别调用 equals 方法都返回 true
两个对象有相同的 hashcode 值,但它们不一定是相等的
因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖
hashCode 方法的重写原则就是保证 equals 方法认定为相同的两个对象拥有相同的哈希值。