1、对引用类型来说,如果我比较两对象地址是否相等,或者是否是引用自同一对象,用==方法,如果比较两对象内容是否相等,用覆写的 equals方法就行了?那么如果我只覆写equals方法不覆写hashCode方法,是什么效果呢,难道我a.equals(b)就不是在比较两对象的内容吗,如果我覆写了hashCode方法,a.equals(b)难道就成了比较两对象地址了?等同于==了?
2、如果在覆写equals方法时候要覆写hashCode方法,应如何覆写呢,有什么规范呢?
如果我只覆写equals方法而不覆写hashCode方法会出现什么情况呢,当我两个对象内容相等但地址不等时候,a.equals(b)方法,会是什么结果呢?
追答1、不写的话, 只要你不涉及hash结构的操作是没有任何影响的,只是为了符合规范往往是要重写的。
2、在涉及到hash结构的对象操作,如hashMap或是hashSet对象在做contains等方法时,要想返回true,则必须equals和hashcode均相同才会返回true。除此之外均无影响。