<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() 方法,因此它們就比較了內容,說這么多看源碼吧。

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品久久人人爱| 亚洲国产成人手机在线电影bd| 有码人妻在线免费看片| 中国人xxxxx69免费视频| 亚洲AV本道一区二区三区四区 | 在线观看永久免费视频网站| 久久综合久久综合亚洲| 最近高清国语中文在线观看免费| 亚洲日本国产综合高清| 免费观看的毛片手机视频| 亚洲国产精品99久久久久久| 日韩精品视频免费在线观看| mm1313亚洲国产精品无码试看| 久久www免费人成看片| 亚洲欧洲日本精品| 中文字幕无码成人免费视频| 久久久国产亚洲精品| 免费看片免费播放| 香蕉视频免费在线| 在线亚洲午夜理论AV大片| 水蜜桃视频在线观看免费| 国产a v无码专区亚洲av| 青青操免费在线观看| 老汉色老汉首页a亚洲| 国产又黄又爽又猛免费app| 久久亚洲中文字幕精品有坂深雪 | 亚洲一级高清在线中文字幕| 久久精品a一国产成人免费网站| 亚洲高清美女一区二区三区| 91麻豆最新在线人成免费观看| 最新国产精品亚洲| 国产gav成人免费播放视频| 一个人免费观看www视频| 国产精品国产亚洲精品看不卡| 91香蕉国产线观看免费全集| 亚洲国产中文在线二区三区免| 麻豆国产人免费人成免费视频| 人体大胆做受免费视频| 亚洲国产精品一区第二页| 香蕉97超级碰碰碰免费公| 亚洲AV无码一区二区乱子仑|