<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    equals()方法個人理解

    Posted on 2009-08-08 12:38 BBT_soft 閱讀(2034) 評論(6)  編輯  收藏

    《think in java》中有這么一段話:

    如果想比較兩個對象的實際內容是否相同,又該如何操作呢?此時,必須使用所有對象都使用的特殊方法equals()。但這個方法不適用于"基本類型",基本類型直接使用==和!=即可。如:

    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(ne.equals(n2));

    正如我們預計的那樣,此時得到的結果是true。但事實上并不總是這么簡單!假設您創建了自己的類,像下面這樣:
    class Value{
    int i;
    }
    public class Test{

          public static void main(String[] args){
                 Value v1 = new Value();
                Value v2 = new Value();
                 System.out.println(v1.equals(v2));
        }
    }
    此時的結果又變回了false!

    這是由于equals()的默認行為是比較引用。所以除非在自己的新類中重載equals()方法,否則不可能表現出我們希望的行為。

    大多數Java類庫都實現了用來比較對象內容的equals()方法,而非比較對象引用的equals()方法。

    個人理解:equals()默認行為是比較引用,只是現在絕大多數Java類庫都實現了用來比較對象內容的equals()方法,而并沒有實現比較對象引用的equals()方法。所以現在說equals()比較的是內容,如果自己的類實現比較對象引用的equals()方法,也可以說equals()比較對象的引用,只是實現問題。

    Feedback

    # re: equals()方法個人理解  回復  更多評論   

    2009-08-09 10:19 by 戴爾筆記本
    不錯啊

    # re: equals()方法個人理解  回復  更多評論   

    2009-08-09 17:28 by 惜棋
    遠沒有那么簡單

    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    System.out.println(n1 ==n2);



    Integer m1 = new Integer(247);
    Integer m2 = new Integer(247);
    System.out.println(m1==m2);

    # re: equals()方法個人理解  回復  更多評論   

    2009-08-09 22:18 by charleeHu
    看看JDK源碼不就清楚了么 ==!

    # re: equals()方法個人理解  回復  更多評論   

    2009-08-10 15:13 by HalZhang
    不同的情況下還需要不同的比較方法,例如Hibernate的實體

    # re: equals()方法個人理解[未登錄]  回復  更多評論   

    2009-08-10 19:42 by stanleyxu2005
    It is clear that you should override the equals method for your own data type by default. BTW: Do not use "==" in general. If the object on the right side is null, an NullPointerException will be thrown.

    # re: equals()方法個人理解  回復  更多評論   

    2009-08-11 10:20 by 隔葉黃鶯
    樓主的理解恐怕把問題稍稍搞復雜了些,所謂比較內容只是 equals 方法的一個約定,如果高興的話你可以認為兩個對象只要某一個屬性(如id)是相等的就是 equals 的。

    所以說到底,你就看 equals() 方法的實現,看運行時具體調用了哪個 equals() 方法就行,就是面向對象的多態嗎!

    因為 Object 實現的 equals() 方法就是比較引用,所以如果你的類沒有實現 equals() 方法,它可能調用的就是 Object 的 equals() 方法來比較引用,除非繼承樹中有 equals() 的其他實現。

    像 String, Integer 等都自己實現了 equals() 方法,因此它們就比較了內容,說這么多看源碼吧。

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日韩亚洲人成在线综合| 亚洲色大成WWW亚洲女子| 美女巨胸喷奶水视频www免费| 国产男女猛烈无遮挡免费视频| 亚洲制服丝袜中文字幕| 午夜dj免费在线观看| 亚洲AV日韩AV永久无码色欲| 日本特黄特色免费大片| 成人亚洲国产精品久久| 亚洲精品456播放| 九九99热免费最新版| 久久久久无码精品亚洲日韩| 久久99精品视免费看| 亚洲国产精品综合福利专区| 国产美女在线精品免费观看| 国产亚洲精品美女2020久久| 亚洲男人的天堂在线va拉文| 免费高清国产视频| 亚洲国产精品久久网午夜| 日韩免费视频播播| 中文字幕无码免费久久9一区9| 亚洲成人免费在线| AV免费网址在线观看| 免费国产a理论片| 亚洲av不卡一区二区三区| 国产精品入口麻豆免费观看| 九九精品国产亚洲AV日韩| 国产精品亚洲mnbav网站| 91禁漫免费进入| 另类专区另类专区亚洲| 久久精品国产亚洲av麻豆| 成人免费在线视频| 一级看片免费视频| 久久精品国产亚洲av麻豆图片| 免费一级毛片在线播放| 老汉精品免费AV在线播放| mm1313亚洲国产精品无码试看| 亚洲人成人77777网站| a级毛片无码免费真人| 美女视频黄的免费视频网页| 亚洲欧美日韩自偷自拍|