java中为什么重写equals时必须重写hashCode方法?

 在上一篇博文

/**      * Returns a hash code value for the object. This method is      * supported for the benefit of hash tables such as those provided by      * {@link java.util.HashMap}.      * <p>      * The general contract of {@code hashCode} is:      * <ul>      * <li>Whenever it is invoked on the same object more than once during      *     an execution of a Java application, the {@code hashCode} method      *     must consistently return the same integer, provided no information      *     used in {@code equals} comparisons on the object is modified.      *     This integer need not remain consistent from one execution of an      *     application to another execution of the same application.      * <li>If two objects are equal according to the {@code equals(Object)}      *     method, then calling the {@code hashCode} method on each of      *     the two objects must produce the same integer result.      * <li>It is <em>not</em> required that if two objects are unequal      *     according to the {@link java.lang.Object#equals(java.lang.Object)}      *     method, then calling the {@code hashCode} method on each of the      *     two objects must produce distinct integer results.  However, the      *     programmer should be aware that producing distinct integer results      *     for unequal objects may improve the performance of hash tables.      * </ul>      * <p>      * As much as is reasonably practical, the hashCode method defined by      * class {@code Object} does return distinct integers for distinct      * objects. (This is typically implemented by converting the internal      * address of the object into an integer, but this implementation      * technique is not required by the      * Java&trade; programming language.)      *      * @return  a hash code value for this object.      * @see     java.lang.Object#equals(java.lang.Object)      * @see     java.lang.System#identityHashCode      */    public native int hashCode();
复制代码

 

复制代码
/**      * Indicates whether some other object is "equal to" this one.      * <p>      * The {@code equals} method implements an equivalence relation      * on non-null object references:      * <ul>      * <li>It is <i>reflexive</i>: for any non-null reference value      *     {@code x}, {@code x.equals(x)} should return      *     {@code true}.      * <li>It is <i>symmetric</i>: for any non-null reference values      *     {@code x} and {@code y}, {@code x.equals(y)}      *     should return {@code true} if and only if      *     {@code y.equals(x)} returns {@code true}.      * <li>It is <i>transitive</i>: for any non-null reference values      *     {@code x}, {@code y}, and {@code z}, if      *     {@code x.equals(y)} returns {@code true} and      *     {@code y.equals(z)} returns {@code true}, then      *     {
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信