Be alaways javaing...

          Loving Java
          posts - 43, comments - 5, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Java中equals() hashcode()方法

          Posted on 2008-08-04 14:38 追風舞者 閱讀(202) 評論(0)  編輯  收藏 所屬分類: J2SE

                Java語言中的equals的規范:

                    1. 自反性:對于任何一個非空引用xx.equals(x)應該返回true
              2. 對稱性:對于任何引用xy,如果x.equals(y)返回true,那么y.equals(x)也應該返回true
              3. 傳遞性:對于任何引用xyz,如果x.equals(y)返回truey.equals(z)返回true,那么x.equals(z)也應該返回true
              4. 一致性:如果xy引用的對象沒有發生變化,那么反復調用x.equals(y)應該返回同樣的結果。
              5. 對于任何非空引用xx.equals(null)應該返回false

           public boolean equals(Object obj) {
            boolean result = false;
            if (this == obj)
             return true;
            if (!(obj instanceof Student))
             return false;
            Student objTemp = (Student) obj;
            if (this.getId() == objTemp.getId())
             result = true;
            return result;
           }

          Java語言中的hashcode:

            1. 將一個非0常數,例如17,儲存于int result變量中。
            2. 對對象中的每一個有意義的字段f(更確切地說是被equals()所考慮的每一個字段)進行如下處理:
              A. 對這個字段計算出型別為int的hash 碼 c:
                i. 如果字段是個boolean,計算(f ? 0 : 1)。
                ii. 如果字段是個byte,char,short或int,計算(int)f。
                iii. 如果字段是個long,計算(int)(f^(f >>> 32))。
                iv. 如果字段是個float,計算Float.floatToIntBits(f)。
                v. 如果字段是個double,計算Double.doubleToLongBits(f),然后將計算結果按步驟2.A.iii處理。
                vi. 如果字段是個object reference,而且class 的equals()透過「遞歸呼叫equals()」的方式來比較這一字段,那么就同樣也對該字段遞歸呼叫hashCode()。
                vii. 如果字段是個array,請將每個元素視為獨立字段。也就是說對每一個有意義的元素施行上述規則,用以計算出hash 碼,然后再依步驟2.B將這些數值組合起來。
              B. 將步驟A計算出來的hash碼 c按下列公式組合到變量result中:result = 37*result + c;
           3. 傳回result。
           4. 完成hashCode()之后,反躬自省一下:是否相等的實體具有相等的hash 碼?如果不是,找出原因并修正問題。

          主站蜘蛛池模板: 黔西县| 陇西县| 长葛市| 密山市| 岢岚县| 左云县| 威海市| 泸州市| 古浪县| 荥阳市| 长阳| 濮阳县| 化州市| 大安市| 竹溪县| 剑阁县| 汝南县| 宜城市| 平原县| 垦利县| 通化县| 于田县| 安乡县| 通辽市| 台江县| 荥经县| 辉南县| 比如县| 紫金县| 新平| 浦江县| 黄大仙区| 岑巩县| 镶黄旗| 西华县| 县级市| 城固县| 乌拉特中旗| 锦屏县| 长顺县| 嵩明县|