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有什么樣的關系呢?
# 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