java.lang.Object的约定如下:
1,在程序的同一执行期间,如果equals方法的信息不给修改,那么对同一对象多次调用hashcode得出的值也是必须一样。但是不要求在不同的执行期间保持一致
2,如果两个对象的equals()方法等同,那么两对象任何一个调用hashCode()方法,必须产生同样的结果。
3,如果两对象的equals()方法不相等,那么对两对象的任意对象调用hashCode()方法,不要求产生两个不同的整数结果
hashcode 就仿佛是一个Object的ID,如果说它有什么特别,那就是它是一个int类型的值。在所有对象的运算中,int是最快(当然最快的是char,但是它能表达的信息太有限了)。一个简单的例子是Hashtable.contain(Object)方法,它首先是根据Object的散列值去判断,只有当出现多个相同的散列值的时候才会调用equals(),因为判断int比判断Object.equals()要快很多,这是一个提高效率的策略问题
1,在程序的同一执行期间,如果equals方法的信息不给修改,那么对同一对象多次调用hashcode得出的值也是必须一样。但是不要求在不同的执行期间保持一致
2,如果两个对象的equals()方法等同,那么两对象任何一个调用hashCode()方法,必须产生同样的结果。
3,如果两对象的equals()方法不相等,那么对两对象的任意对象调用hashCode()方法,不要求产生两个不同的整数结果
hashcode 就仿佛是一个Object的ID,如果说它有什么特别,那就是它是一个int类型的值。在所有对象的运算中,int是最快(当然最快的是char,但是它能表达的信息太有限了)。一个简单的例子是Hashtable.contain(Object)方法,它首先是根据Object的散列值去判断,只有当出现多个相同的散列值的时候才会调用equals(),因为判断int比判断Object.equals()要快很多,这是一个提高效率的策略问题