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

          ??? 在寫java程序時往往要遇到判斷兩個實例是否相等的問題,那么Object中的equals(Object),到底比較的是兩個實例中的什么呢?我認為他們比較的是創(chuàng)建實例時所深成的hashCode,(可是我的直覺認為不是這樣的),如下:
          ??? 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 (其中st和str這兩個實例所生成的hashCode是相同的)

          ??? 這里我有一個問題,在什么情況下"=="才成立?以前我認為兩個實例的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類型則另當別論,因為涉及到內(nèi)存節(jié)約的問題.在良葛格的<java學習筆記>一書中,有較的介紹.

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 娱乐| 商城县| 高邑县| 博兴县| 揭阳市| 桂阳县| 汾西县| 东乡县| 榕江县| 卓资县| 松阳县| 荆州市| 沾益县| 富民县| 灵山县| 泌阳县| 德化县| 德清县| 长治市| 甘泉县| 泉州市| 连州市| 卢湾区| 东乡| 阳江市| 铅山县| 扎囊县| 都昌县| 古蔺县| 永吉县| 北流市| 比如县| 石狮市| 贵阳市| 沽源县| 梅河口市| 湘西| 木里| 昭苏县| 原平市| 清河县|