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 閱讀筆記 】