若重写equals(Object obj)方法有必要重写hashcode()方法确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。说得简单点就是“如果两个对象相同那么他们的hashcode应该 相等”。不过请注意这个只是规范如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值编译和运行都是不会报错的。不过这样违反了Java规范程序也就埋下了BUG。 规范2如果equals(Object obj)返回false即两个对象“不相同”并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是“如果两个对象不相同他们的hashcode可能相同”。 根据这两个规范可以得到如下推论 1、如果两个对象equalsJava运行时环境会认为他们的hashcode一定相等。 2、如果两个对象不equals他们的hashcode有可能相等。 3、如果两个对象hashcode相等他们不一定equals。 4、如果两个对象hashcode不相等他们一定不equals |