hashCode和equals的面试题
/*
* 两个对象 Person p1 p2
* 问题: 如果两个对象的哈希值相同 p1.hashCode()==p2.hashCode()
* 两个对象的equals一定返回true吗 p1.equals(p2) 一定是true吗
* 正确答案:不一定
*
* 如果两个对象的equals方法返回true,p1.equals(p2)==true
* 两个对象的哈希值一定相同吗
* 正确答案: 一定
*/
在 Java 应用程序执行期间,
1.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
2.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。
两个对象不同(对象属性值不同) equals返回false=====>两个对象调用hashCode()方法哈希值相同
两个对象调用hashCode()方法哈希值不同=====>equals返回true
两个对象不同(对象属性值不同) equals返回false=====>两个对象调用hashCode()方法哈希值不同
两个对象调用hashCode()方法哈希值相同=====>equals返回true
所以说两个对象哈希值无论相同还是不同,equals都可能返回true