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

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


    網站導航:
     
    主站蜘蛛池模板: 国产一级在线免费观看| 一本岛高清v不卡免费一三区| 亚洲AV日韩精品久久久久久 | 精品国产污污免费网站入口在线| 亚洲AV永久无码精品一百度影院| 97碰公开在线观看免费视频| 国产精品亚洲二区在线| 亚洲欧洲第一a在线观看| 日韩成人免费aa在线看| a毛片在线还看免费网站| 亚洲人成人网站18禁| 亚洲成AV人片在| 国产成人精品123区免费视频| 你懂的免费在线观看| 亚洲高清毛片一区二区| 亚洲成AV人片一区二区密柚| 青青青国产免费一夜七次郎| 日韩免费的视频在线观看香蕉| 亚洲人成日本在线观看| 亚洲韩国精品无码一区二区三区| 全免费一级毛片在线播放| 久久午夜无码免费| 粉色视频在线观看www免费| 亚洲国产成人精品无码区在线秒播| 久久精品国产精品亚洲人人| 国产成人免费爽爽爽视频| 免费污视频在线观看| 污视频网站免费观看| 亚洲国产av一区二区三区丶| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲色欲色欲www| 日本红怡院亚洲红怡院最新 | 亚洲一卡2卡三卡4卡有限公司| 吃奶摸下高潮60分钟免费视频| 黄+色+性+人免费| 无码日韩精品一区二区三区免费| 无忧传媒视频免费观看入口| 中文字幕无码精品亚洲资源网久久| 久久久久亚洲AV片无码下载蜜桃 | 亚洲精品网站在线观看不卡无广告 | 亚洲午夜精品一区二区|