qq_23908539
qq_23908539
2015-09-12 07:13
采纳率: 87.5%
浏览 2.0k
已采纳

java中重写equals方法为什么不直接在里面比较hashcode()?

看书上说只要重写在一个类中重写equals方法,那就一定要重写hashcode方法,因为两个对象只要equals返回值为true,那么他俩的hashcode就一定相同。
那为什么不可以提前先写好hashcode函数,然后在equals函数里面直接来一行if(this.hashcode() == otherObject.hashcode()) return true;else return false;就行了?
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • caozhy
    已采纳

    hashcode相同,两个对象可以相同,可以不同
    hascode不同,两个对象必须不同。
    这是hashcode的原则。

    点赞 评论
  • caozhy

    equals除了影响hashcode以外,它还有3个原则:
    它必须是对称的,如果a.equals(b)成立,那么b.equals(a)必须成立,反之亦然。
    它必须是自反的,a.equals(a)必须永远成立。
    它必须是传递的,a.equals(b)和b.equals(c)成立,那么必须保证a.equals(c)成立。

    点赞 评论
  • havedream_one
    havedream_one 2015-09-12 08:35

    hashcode不同,对象一定不同,而hashcode相同,对象不一定相同
    而equals却要一个确定性的结果,相同就是相同,不同就是不同

    点赞 评论

相关推荐