1. 程式人生 > >Java equals與“==”的區別

Java equals與“==”的區別

算法 log div padding net class 如果 ros get

理解HashSet的時候遇到的問題,在這裏記錄一下:

  1. 使用 == 進行比較, 該方式比較的是變量是否同時指向一塊內存地址,如果是就返回true,否則返回false

  2. 使用對象本身的equals進行比較,equals首先會進行 == 比較,然後會進行邏輯比較,當然你可以自己定義自己的比較邏輯,比如JDK內置的String,Integer,Long等都是重寫了這個equals方法的。

  3. 總的來說就是 == 表示完全相等,而equals表示邏輯相等

註意:兩個對象相等Hashcode一定相等(object類的hashcode算法hashcode算出來的結果就是該對象在內存中的地址的十進制表示

),兩個對象的hashcode相等不一定是一個對象(重寫hashcode方法),所以hashcode不能用於比較兩個對象是否相等

下面這一段轉自:http://blog.csdn.net/hudashi/article/details/6944491,便於理解hashcode與equals()之間的關系

根據hashCode的常規協定首先要明白一個問題:
  一,equals()相等的兩個對象,hashcode()一定相等.
  二,equals()不相等的兩個對象,卻並不能證明他們的hashcode()不相等。
  換句話說,equals()方法不相等的兩個對象,hashcode()有可能相等。(我的理解是由於哈希碼在生成的時候產生沖突造成的)。
  三,反過來:hashcode()不等,一定能推出equals()也不等(因為如果equals()相等的話就和第一條矛盾了);
  hashcode()相等,equals()可能相等,也可能不等。

Java equals與“==”的區別