美文网首页
equals,hashCode

equals,hashCode

作者: 咿咿呀呀zzz | 来源:发表于2017-07-24 16:05 被阅读0次

    equals() 与 == 的区别是什么?

    • == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象。
    • equals() : 它的作用也是判断两个对象是否相等。

    hashCode() 的作用
    hashCode() 在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。

    1. 如果两个对象相等,那么它们的hashCode()值一定要相同;
    2. 如果两个对象hashCode()相等,它们并不一定相等。
      hashCode的算法不保证每个对象生成的结果都不一样

    需要注意记住的事情

    • 尽量保证使用对象的同一个属性来生成hashCode()和equals()两个方法。在我们的案例中,我们使用员工id。
    • eqauls方法必须保证一致(如果对象没有被修改,equals应该返回相同的值)
      任何时候只要a.equals(b),那么a.hashCode()必须和b.hashCode()相等。
    • 两者必须同时重写。

    当使用ORM的时候特别要注意的

    • 如果你使用ORM处理一些对象的话,你要确保在hashCode()和equals()对象中使用getter和setter而不是直接引用成员变量。因为在ORM中有的时候成员变量会被延时加载,这些变量只有当getter方法被调用的时候才真正可用。
    • 例如在我们的例子中,如果我们使用e1.id == e2.id则可能会出现这个问题,但是我们使用e1.getId() == e2.getId()就不会出现这个问题。

    参考

    1. https://www.oschina.net/question/82993_75533
    2. http://www.cnblogs.com/skywang12345/p/3324958.html

    相关文章

      网友评论

          本文标题:equals,hashCode

          本文链接:https://www.haomeiwen.com/subject/gfybkxtx.html