Java 中对象的比较使用 equals 函数
equals 函数是 Object 类中定义的,默认的是比较 对象的 应用地址是否相等
public boolean equals(Object obj) {
return (this == obj);
}
所以自定义对象一般都需要 重写 equals 函数
而 jdk 内置对象 String Long Integer hashMap 等都重写了 equals 函数
其中 String 对象的equals 比较 使用 每个 char == 比较 是否相等,如果有一个不相等在返回false
Long 对象 的equals 比较 会转换为 long 类型之后进行 == 比较
hashMap 比较每个 key 和 value 是否相等 每个 可以 和 value 桑踹鞥呢 equals 比较
自定义对象如果没有 重写 equals 则都是比较的应用地址是否相等
hashCode 是对象的散列码,返回的是 int 类型的值
对象的散列码是为了更好的支持基于哈希机制的Java集合类,例如 Hashtable, HashMap, HashSet
如果2个对象通过equals调用后返回是true,那么这个2个对象的hashCode方法也必须返回同样的int型散列码
如果2个对象通过equals返回false,他们的hashCode返回的值允许相同。(然而,程序员必须意识到,hashCode返回独一无二的散列码,会让存储这个对象的hashtables更好地工作。)
非常全面的 equals 和 hashCode 函数详解:
网友评论