java中的equals()方法和"=="?

          ??? 在寫java程序時往往要遇到判斷兩個實例是否相等的問題,那么Object中的equals(Object),到底比較的是兩個實例中的什么呢?我認(rèn)為他們比較的是創(chuàng)建實例時所深成的hashCode,(可是我的直覺認(rèn)為不是這樣的),如下:
          ??? class Test {
          ??? ??? public String name;
          ???? }

          ??? Test t = new Test();
          ??? t.name = "hello";
          ??? Test two = new Test();
          ??? two.name = "hello";

          ??? 其中t.equals(two) 和  t == two 返回的都是false,(其中t和two這兩個實例所生成的hashCode是不相同的)

          ??? 而對如下:
          ??? String st = "hello";
          ??? String str = new String("hello");
          ??? 其中str.equals(str)和st == str返回的分別是true和false?。ㄆ渲校螅艉停螅簦蜻@兩個實例所生成的hashCode是相同的)

          ??? 這里我有一個問題,在什么情況下"=="才成立?以前我認(rèn)為兩個實例的hashCode向同這兩個實例就成立了,可是上面的例子已經(jīng)證明了不成立了。 那到底什么情況下"=="才成立呢?(不要告訴我,他們的條件是要在同一個實例的情況下,那我就倒!!!!!)

          ??? 那不同的實例與hashCode有什么樣的關(guān)系呢?
          posted on 2006-06-26 16:35 小橋 流水 閱讀(534) 評論(2)  編輯  收藏 所屬分類: java

          評論

          # re: java中的equals()方法和"=="? 2006-12-27 16:58 hdwt  回復(fù)  更多評論   

          先說一下基本類型和非自己創(chuàng)建的基本類型對象的==的作用,其他的我沒有測試所以我不敢隨便說.
          如果是基本數(shù)據(jù)類型:int ,float,long,double,byte,char
          例如:int a = 10;
          int b = 10;
          System.out.println(a==b);
          輸出都是true
          ------------------------------------------------
          如果是對象比較 Integer c = new Integer(10);
          Integer d = new Integer(10);
          System.out.println(c==d);
          那么輸出是false
          ------------------------------------------------
          如果是基本類型和對象(僅限于基本類類型的對象,Integer,Float,等等)
          float f1 = 4.2f;
          Float f2 = new Float(4.2f);
          System.out.println(f1==f2);
          那么輸出是true

          # re: java中的equals()方法和"=="? 2006-12-27 17:03 hdwt  回復(fù)  更多評論   

          對于String類型則另當(dāng)別論,因為涉及到內(nèi)存節(jié)約的問題.在良葛格的<java學(xué)習(xí)筆記>一書中,有較的介紹.

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 钟山县| 阿合奇县| 新营市| 基隆市| 乌拉特后旗| 万安县| 阆中市| 刚察县| 镇安县| 绥芬河市| 灵武市| 星座| 永州市| 永善县| 彭山县| 绿春县| 白玉县| 兴安县| 新蔡县| 曲阜市| 星子县| 桐乡市| 衢州市| 灌云县| 措美县| 乐至县| 博野县| 博湖县| 江西省| 河北区| 襄樊市| 武功县| 逊克县| 邵阳市| 高邑县| 长海县| 七台河市| 方城县| 鄯善县| 台南市| 天气|