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

          ??? 在寫java程序時往往要遇到判斷兩個實例是否相等的問題,那么Object中的equals(Object),到底比較的是兩個實例中的什么呢?我認為他們比較的是創建實例時所深成的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向同這兩個實例就成立了,可是上面的例子已經證明了不成立了。 那到底什么情況下"=="才成立呢?(不要告訴我,他們的條件是要在同一個實例的情況下,那我就倒!!!!!)

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

          評論

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

          先說一下基本類型和非自己創建的基本類型對象的==的作用,其他的我沒有測試所以我不敢隨便說.
          如果是基本數據類型: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  回復  更多評論   

          對于String類型則另當別論,因為涉及到內存節約的問題.在良葛格的<java學習筆記>一書中,有較的介紹.

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


          網站導航:
           
          主站蜘蛛池模板: 城市| 镇平县| 巴彦淖尔市| 绵阳市| 固安县| 囊谦县| 昆山市| 宣威市| 静乐县| 五华县| 苗栗县| 定州市| 出国| 北京市| 家居| 巴彦县| 介休市| 怀仁县| 左云县| 台江县| 北海市| 邓州市| 集安市| 澎湖县| 靖边县| 周宁县| 玉门市| 永善县| 齐齐哈尔市| 新建县| 红桥区| 景德镇市| 明星| 弋阳县| 新兴县| 尼勒克县| 佳木斯市| 天门市| 越西县| 当雄县| 中西区|