equals方法,instanceof检测对象是否相等以及hashcode笔记

Object类的equals方法用于检测一个对象 是否等于另外一个对象,在Object类中,这个方法将判断两个对象是否具有 相同的引用这和等号的作用是一样的,因为就是用等号实现的
public boolean equals(Object obj) {
        return (this == obj);
    }
所以基本山要对equals重写,像Sting,Math,等类就重写了equals方法,用于对内容的比较。
Java语言规范要求equals方法具有下面特性:(以下是从jdk文档中粘贴的)

equals 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用值 xx.equals(x) 都应返回 true
  • 对称性:对于任何非空引用值 xy,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true
  • 传递性:对于任何非空引用值 xyz,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
  • 一致性:对于任何非空引用值 xy,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
  • 对于任何非空引用值 xx.equals(null) 都应返回 false

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 xy,当且仅当 xy 引用同一个对象时,此方法才返回 truex == y 具有值 true)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果,注:这里说的equals(Object) 方法是指Object类中未被子类重写过的equals方法
如果两个hashCode()返回的结果相等,则两个对象的equals方法不一定相等。


你可能感兴趣的:(Java)