蘋果的成長日記

          我還是個青蘋果呀!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            57 隨筆 :: 0 文章 :: 74 評論 :: 0 Trackbacks
            主要有以下幾個方面需要注意:
          1.重寫equals()和hashCode()
            當真正需要了解兩個引用是否完全相同時,使用==。但是,當需要了解對象本身是否相等時,使用equals()。實際上是要比較兩個不同對象的內(nèi)容在意義上是否等價,除了String類和封裝器類(已重寫了equals()),需要重寫equals().Object內(nèi)的equals()的方法只使用==運算符進行比較,因此,除非重寫equals(),否則只有當兩個引用引用相同的對象時,這兩個對象才被看做是相等的。另外,如果要使類對象能夠用作散列表的鍵(或者任何數(shù)據(jù)結(jié)構(gòu)中用于搜索和/或檢索對象的元素),則必須重寫equals(),使兩個不同實例能夠被看做是相同的。
            我們一般這樣重寫:
            public boolean equals(Object o) {
               if(o instanceof  Moof) && ((Moof)o).getMoofValue() ==  this.moofValue)) {
                  return true;
             } else {
                 return false;
            }
          }
          上面執(zhí)行了兩個操作:
           1)確保所測試對象的類型是正確的!用instanceof
           2)比較我們關(guān)心的屬性
          注意: equals()、hashCode()和toString()方法都是公有的。下面這種重寫是無效的,
              class Foo {
                    boolean equals(Object o) { }
          }
           一定還要注意參數(shù)類型。下面方法是對equals()方法的重載,而不是重寫。
              class Foo {
                 public boolean equals(Foo b) { }
          }
          一定要非常熟悉重寫規(guī)則,要能夠識別類中對Object方法的重寫、重載還是非法重新聲明。在Foo類中,equals()方法把參數(shù)從Object修改為Foo,因此,它是一個重載方法,除非從你自己的代碼(它知道這個新的不同方法,而且碰巧被命名為equals)中調(diào)用,否則,它不會被調(diào)用。
          java API中,在equals()方法內(nèi)定義了一種約定。java約定是一套應(yīng)該遵守的規(guī)則,或者說是想提供其他人所期望的“正確”設(shè)計時必須要遵守的內(nèi)容。有5點:
           1.自反性: x.equals(x)應(yīng)該返回true;
           2.對稱性:當且僅當y.equals(x)返回true時,x.equals(y)才返回true。
          3.可傳遞性
          4.一致性
          5.任何非空引用值x,x.equals(null)應(yīng)該返回false.
          如果使用equals()方法,兩個對象被認為是相等的,則它們必須具有相同的散列碼值。因為Object類的默認散列碼總是為每個對象產(chǎn)生一個唯一號,即使重寫的equals()方法認為兩個或多個對象是相等的,也是這樣。所以,為了安全起見,如果重寫equals(),一定也要重寫
          hashCode().
          posted on 2005-06-26 15:07 蘋果 閱讀(1400) 評論(0)  編輯  收藏 所屬分類: J2EE/JAVA學習
          主站蜘蛛池模板: 霍林郭勒市| 潼南县| 寿光市| 山丹县| 乐至县| 沛县| 榆中县| 南涧| 旌德县| 镇江市| 长葛市| 麦盖提县| 周至县| 台北市| 讷河市| 林甸县| 宁夏| 苗栗县| 孟连| 清河县| 贡嘎县| 阆中市| 惠安县| 肥乡县| 湖南省| 海宁市| 安西县| 上高县| 洛南县| 桦甸市| 平罗县| 建昌县| 西昌市| 黄大仙区| 宝应县| 遂宁市| 综艺| 城步| 五峰| 和田县| 台州市|