zoukankan      html  css  js  c++  java
  • 总结Java equals()和hashCode()的联系

    Java equals()和hashCode()的联系

    1. 如果两个对象是相等的,那么它们必须有相同的哈希码。
    2. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等。
      1. 如果两个对象是不同的类的实例 他们hashCode可能相等。
      2. 当两个对象是同一个类型的实例,他们hashCode相等,则他们相等。

    约定:equals()为真那么hashCode也要相等。
    结论:

    一,equals()相等的两个对象,hashcode()一定相等。
    二,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
    换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。 (我的理解是由于哈希码在生成的时候产生冲突造成的)。
    三,反过来:hashcode()不等,一定能推出equals()也不等(因为如果equals()相等的话就和第一条矛盾了);转自这里

    原则:

    判断相等用equals(),判断不相等用 hashcode();

    重写equals()遵循的原则:

    对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
    反射性:x.equals(x)必须返回是“true”。
    类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
    一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
    任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。

  • 相关阅读:
    实现两个窗口通信方法-postMessage
    Java中的参数传值方式
    数据库连接池(connection pool)
    批量处理JDBC语句提高处理速度
    数据库事务,隔离级别
    BeanUtils介绍及使用
    JDBC获得数据库连接及使用
    jquery radio 行选中 操作
    EXTJS4.0 grid 可编辑模式 配置
    sql server 中使用 LIKE 语句 SqlParameter 使用
  • 原文地址:https://www.cnblogs.com/slankka/p/9158565.html
Copyright © 2011-2022 走看看