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