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

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

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

    txdyny

    常用鏈接

    統(tǒng)計(jì)

    最新評論

    (轉(zhuǎn))java中equals方法與==邏輯運(yùn)算符

    java中equals方法與==邏輯運(yùn)算符

        在Java中,我們比較兩個對象時有兩種方法,一種是直接使用邏輯運(yùn)算符==號,還有一種就是用equlas()函數(shù),該函數(shù)在Object中就定義了,所以每個類都會有這個函數(shù),好了現(xiàn)在我們看看普通對象和字符串在使用這兩種比較方式有什么不同,看下面代碼,讀者可以猜猜看結(jié)果是什么:

    public class Equals {
     /**
      * @param args
      */
     public static void main(String[] args) {
      Object o1 = new Object();
      Object o2 = new Object();
      Object o3 = o1;
      Object o4 = o2;
      System.out.println( "o1.equals( o1 ): " + o1.equals( o1 ) );
      System.out.println( "o1.equals( o2 ): " + o1.equals( o2 ) );
      System.out.println( "o1.equals( o3 ): " + o1.equals( o3 ) );
      System.out.println( "o1.equals( o4 )" + o1.equals( o4 ) );
     
      System.out.println();
      System.out.println( "o1 == o1: " + ( o1 == o1 ) );
      System.out.println( "o1 == o2: " + ( o1 == o2 ) );
      System.out.println( "o1 == o3: " + ( o1 == o3 ) );
      System.out.println( "o1 == o4: " + ( o1 == o4 ) );
      System.out.println();
      String s1 = new String( "abc" );
      String s2 = new String( "abc" );
      String s3 = new String( "def" );
      String s4 = s1;
      String s5 = s2;
      String s6 = s3;
      System.out.println( "s1.equals( s1 ): " + s1.equals( s1 ) );
      System.out.println( "s1.equals( s2 ): " + s1.equals( s2 ) );
      System.out.println( "s1.equals( s3 ): " + s1.equals( s3 ) );
      System.out.println( "s1.equals( s4 ): " + s1.equals( s4 ) );
      System.out.println( "s1.equals( s5 ): " + s1.equals( s5 ) );
      System.out.println( "s1.equals( s6 ): " + s1.equals( s6 ) );
      System.out.println();
      System.out.println( "s1 == s1: " + ( s1 == s1 ) );
      System.out.println( "s1 == s2: " + ( s1 == s2 ) );
      System.out.println( "s1 == s3: " + ( s1 == s3 ) );
      System.out.println( "s1 == s4: " + ( s1 == s4 ) );
      System.out.println( "s1 == s5: " + ( s1 == s5 ) );
      System.out.println( "s1 == s6: " + ( s1 == s6 ) );
     }
    }
     
    有沒有答案了,如果有了,看看你的答案正確嗎,
    o1.equals( o1 ): true
    o1.equals( o2 ): false
    o1.equals( o3 ): true
    o1.equals( o4 )false
    o1 == o1: true
    o1 == o2: false
    o1 == o3: true
    o1 == o4: false
    s1.equals( s1 ): true
    s1.equals( s2 ): true
    s1.equals( s3 ): false
    s1.equals( s4 ): true
    s1.equals( s5 ): true
    s1.equals( s6 ): false
    s1 == s1: true
    s1 == s2: false
    s1 == s3: false
    s1 == s4: true
    s1 == s5: false
    s1 == s6: false
     
    為什么會出現(xiàn)上面的結(jié)果呢,其實(shí)在Java中,邏輯運(yùn)算符==號在比較對象的時候是嚴(yán)格的比較這兩個對象是不是同一個對象,說白了,它比較的是兩個對象在內(nèi)存中的地址,只有當(dāng)兩個變量指向同一個內(nèi)存地址即同一個對象時才返回true,否則返回false,所以就可以看到當(dāng)我們用new方法創(chuàng)建了o1和o2由于分配了兩個不同的內(nèi)存空間,所以它們在用邏輯運(yùn)算符==號來判斷兩個對象是否相等時自然應(yīng)該返回的是false,而在比較o1和o3時,由于o3指向的實(shí)際是o1所指向的地址,所以返回true,在字符串中邏輯運(yùn)算符==的作用和普通對象是一樣的。
     
    那么對于o1和o2用equals()方法比較返回的為什么也是false呢,我們來看一段代碼:
    public boolean equals( Object o2 )
    {
       this == o2;
    }
    這是Object中equals()函數(shù)的實(shí)現(xiàn),可以看到實(shí)際上它的功能還是比較兩個對象的地址,自然你現(xiàn)在可以推出為什么o1和o2比較時還是返回false了。
     
    那現(xiàn)在問題可能來了,那為什么s1和s2比較時返回的是true呢,他們在內(nèi)存空間的地址可是不一樣的啊,呵呵,其實(shí)這個理解起來更簡單了,因?yàn)樵赟tring類中重載了equals()函數(shù),使它比較的是兩個字符串的內(nèi)容,而不是兩個字符串對象在內(nèi)存中的地址,至于如何寫這個函數(shù)我就不多說了,大家可以自己寫寫看,實(shí)現(xiàn)方式有多種,不過Sun公司當(dāng)然只有那一種實(shí)現(xiàn)方式,哈哈

    posted on 2007-12-09 18:10 趙大頤 閱讀(502) 評論(0)  編輯  收藏


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成年女人免费视频播放体验区| 最近更新免费中文字幕大全| 99久久国产热无码精品免费| 亚洲av之男人的天堂网站| 亚洲精品视频免费| 国产亚洲精品成人AA片新蒲金| 一级黄色毛片免费看| 亚洲精品国产精品乱码在线观看| 中文字幕免费人成乱码中国| 亚洲人成人一区二区三区| 青青草原1769久久免费播放| 久久亚洲AV无码精品色午夜麻| 久久国产乱子伦精品免费一| 亚洲自偷精品视频自拍| 中文字幕无码成人免费视频| 亚洲经典千人经典日产| 亚洲成A人片在线观看无码3D | 一二三四影视在线看片免费| 一本色道久久88亚洲精品综合| 午夜电影免费观看| 美女被免费视频网站a| 在线观看亚洲成人| 午夜免费福利小电影| 亚洲国产精品白丝在线观看| 免费黄色毛片视频| 一级毛片人与动免费观看| 亚洲爆乳无码一区二区三区| 久久国内免费视频| 美女扒开尿口给男人爽免费视频| 国产亚洲情侣一区二区无| 5555在线播放免费播放| 亚洲精品无码成人| 亚洲综合无码精品一区二区三区| 小日子的在线观看免费| 精品国产日韩久久亚洲| 亚洲Av无码乱码在线播放| 四虎影视在线影院在线观看免费视频| 久久亚洲精品专区蓝色区| 亚洲国产精品尤物yw在线| 免费人成视频在线观看网站 | 亚洲人成色77777在线观看大|