equals方法和hashCode

Object 类的equals()、hashCode()

所有的class最终都继承自ObjectObject定义了几个重要的方法:

  • hashCode():是一个native方法,计算一个 instance 哈希值

    1
    public native int hashCode();
  • equals():return (this == obj);,判断是否为同一对象。

    1
    2
    3
    public 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 方法认定为相同的两个对象拥有相同的哈希值