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

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

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

    equals()方法個(gè)人理解

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

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

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

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

    正如我們預(yù)計(jì)的那樣,此時(shí)得到的結(jié)果是true。但事實(shí)上并不總是這么簡單!假設(shè)您創(chuàng)建了自己的類,像下面這樣:
    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));
        }
    }
    此時(shí)的結(jié)果又變回了false!

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

    大多數(shù)Java類庫都實(shí)現(xiàn)了用來比較對象內(nèi)容的equals()方法,而非比較對象引用的equals()方法。

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

    Feedback

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

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

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

    2009-08-09 17:28 by 惜棋
    遠(yuǎn)沒有那么簡單

    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()方法個(gè)人理解  回復(fù)  更多評論   

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

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

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

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

    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()方法個(gè)人理解  回復(fù)  更多評論   

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

    所以說到底,你就看 equals() 方法的實(shí)現(xiàn),看運(yùn)行時(shí)具體調(diào)用了哪個(gè) equals() 方法就行,就是面向?qū)ο蟮亩鄳B(tài)嗎!

    因?yàn)?Object 實(shí)現(xiàn)的 equals() 方法就是比較引用,所以如果你的類沒有實(shí)現(xiàn) equals() 方法,它可能調(diào)用的就是 Object 的 equals() 方法來比較引用,除非繼承樹中有 equals() 的其他實(shí)現(xiàn)。

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 91av免费观看| 24小时日本韩国高清免费| 日本媚薬痉挛在线观看免费| 亚洲国产美女精品久久久久| 18禁美女黄网站色大片免费观看| 亚洲五月激情综合图片区| 今天免费中文字幕视频| 亚洲人成网站在线播放影院在线| 伊人久久免费视频| 亚洲国产精品乱码在线观看97| 91黑丝国产线观看免费| 亚洲综合av一区二区三区| 四虎影视免费在线| 免费无码婬片aaa直播表情| 亚洲精品A在线观看| 成全视频免费观看在线看| 久久久亚洲精品国产| 一级毛片在线免费观看| 亚洲一级大黄大色毛片| 在线免费视频一区二区| 特级毛片A级毛片100免费播放| 亚洲偷自拍拍综合网| 久久99热精品免费观看动漫| 亚洲精品伊人久久久久| 四虎AV永久在线精品免费观看| 国产精品玖玖美女张开腿让男人桶爽免费看 | 亚洲午夜免费视频| 九九精品免费视频| 色婷婷精品免费视频| 亚洲AV无码码潮喷在线观看| 国产92成人精品视频免费| WWW国产亚洲精品久久麻豆| 亚洲色无码一区二区三区| 亚洲精品视频免费在线观看| 亚洲AV无码成人精品区狼人影院| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久亚洲精品中文字幕无码| 免费视频专区一国产盗摄| 全黄A免费一级毛片| 亚洲午夜电影在线观看高清| 亚洲国产成人乱码精品女人久久久不卡|