java中的equals()方法和"=="?
??? 在寫java程序時(shí)往往要遇到判斷兩個(gè)實(shí)例是否相等的問題,那么Object中的equals(Object),到底比較的是兩個(gè)實(shí)例中的什么呢?我認(rèn)為他們比較的是創(chuàng)建實(shí)例時(shí)所深成的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這兩個(gè)實(shí)例所生成的hashCode是不相同的)
??? 而對(duì)如下:
??? String st = "hello";
??? String str = new String("hello");
??? 其中str.equals(str)和st == str返回的分別是true和false (其中st和str這兩個(gè)實(shí)例所生成的hashCode是相同的)
??? 這里我有一個(gè)問題,在什么情況下"=="才成立?以前我認(rèn)為兩個(gè)實(shí)例的hashCode向同這兩個(gè)實(shí)例就成立了,可是上面的例子已經(jīng)證明了不成立了。 那到底什么情況下"=="才成立呢?(不要告訴我,他們的條件是要在同一個(gè)實(shí)例的情況下,那我就倒!!!!!)
??? 那不同的實(shí)例與hashCode有什么樣的關(guān)系呢?
# re: java中的equals()方法和"=="? 2006-12-27 16:58 hdwt 回復(fù) 更多評(píng)論
先說一下基本類型和非自己創(chuàng)建的基本類型對(duì)象的==的作用,其他的我沒有測(cè)試所以我不敢隨便說.如果是基本數(shù)據(jù)類型:int ,float,long,double,byte,char
例如:int a = 10;
int b = 10;
System.out.println(a==b);
輸出都是true
------------------------------------------------
如果是對(duì)象比較 Integer c = new Integer(10);
Integer d = new Integer(10);
System.out.println(c==d);
那么輸出是false
------------------------------------------------
如果是基本類型和對(duì)象(僅限于基本類類型的對(duì)象,Integer,Float,等等)
float f1 = 4.2f;
Float f2 = new Float(4.2f);
System.out.println(f1==f2);
那么輸出是true