在 Java 中,== 運(yùn)算符、equals() 方法和 hashCode() 方法是用于處理對象比較和哈希計算的重要概念。
== 運(yùn)算符:
== 用于比較基本數(shù)據(jù)類型的值是否相等,以及比較引用類型的引用地址是否相同。
對于基本數(shù)據(jù)類型,== 比較的是它們的值是否相等。
int a = 5;
int b = 5;
System.out.println(a == b); // 輸出 true,因?yàn)?a 和 b 的值相等
對于引用類型,== 比較的是對象的引用地址是否相同。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 輸出 false,因?yàn)?str1 和 str2 的引用地址不同
equals() 方法:
equals() 方法是用于比較對象的內(nèi)容是否相等。
在 Object 類中,equals() 方法默認(rèn)的行為是比較對象的引用地址(與 == 運(yùn)算符相同)。
很多類(例如 String、Integer 等)重寫了 equals() 方法,使其用于比較對象的內(nèi)容是否相等。
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2)); // 輸出 true,因?yàn)?String 類重寫了 equals 方法,比較的是內(nèi)容是否相等
重寫 equals() 方法的類通常會根據(jù)對象的屬性或內(nèi)容來判斷是否相等。
hashCode() 方法:
hashCode() 方法返回對象的哈希碼值(哈希碼是將對象映射到某個整數(shù)的值),通常用于在散列數(shù)據(jù)結(jié)構(gòu)中(如哈希表)進(jìn)行快速查找。
如果兩個對象根據(jù) equals() 方法判斷相等,那么它們的 hashCode() 應(yīng)該返回相同的值,但反之不一定成立。
如果重寫了 equals() 方法,通常也需要重寫 hashCode() 方法,以保證滿足相等的對象具有相同的哈希碼。
總結(jié):
== 比較的是變量的值或引用地址是否相等。
equals() 方法比較的是對象的內(nèi)容是否相等,通常由類的設(shè)計者根據(jù)需要來確定相等的定義。
hashCode() 方法用于返回對象的哈希碼值,通常在需要使用哈希表等散列數(shù)據(jù)結(jié)構(gòu)時被調(diào)用,以便快速定位對象。