l          equals()與==: 
| 
 比較物件內容  | 
 比較是否同一物件  |  
| 
 equals()  | 
 ==  |   
  
String str1 = new String(“abc”); 
String str2 = new String(“abc”); 
String str3 = str1; 
String str4 = “abc”; 
String str5 = “abc”;   |     
| 
    | 
 
str1 / str2  | 
 str1 / str3  | 
 str4 / str5  | 
 str1 / str4  |  
| 
 Equals  | 
 true  | 
 true  | 
 true  | 
 true  |  
| 
 ==  | 
 false  | 
 true  | 
 true  | 
 False  |   
  
l           String str = "abc" 跟 String str = new String("abc")在做”==”得到的結果不同。 
l     long i = 1; double j = 1; // i == j 為true。(因為primitive data type,值相等即為true) 
l           Long a = new Long(3L); Long b = new Long(3L); Double x = new Double(3.0); //a == b為false(因為reference type,非同一個物件了)。//a == x為compile err(因a與x無繼承關係無法convertible) 
l           ==的左右兩邊若為不相容的型別轉換,則會發生compiler errors,但若是equals,當物件不相同時equal()會回傳false,不會造成編譯錯誤(equals Float object and Double object will always return false)。 
l           compares(equals) a Float object and a Double object which will always return false。 
l           每個java class都有一個”equals()”method,這個method是使用”==”來比較兩個reference var所存的值(即是否指向一物件)若要比較content是否相同,必須override equals() method,同時也必須override定義於Object class的”hashcode()”method,否則java collection API操作這個class的object時會錯。 
l           String、Date、File及8個wrapper classes都已override equals() method。 
如果hashCode值相同,那object”可能”相同(equal);如果hashCode值不相同,那object”一定”不相同。 
来自于:【 Garfield 的 SCJP 閱讀筆記 】  
 
  |