更新時(shí)間:2023-05-12 來(lái)源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
a.hashCode()是一個(gè)Java對(duì)象方法,用于返回對(duì)象的哈希碼值。哈希碼是一個(gè)整數(shù),是根據(jù)對(duì)象的內(nèi)容計(jì)算出來(lái)的,用于快速比較對(duì)象是否相等。
a.equals(b)是另一個(gè)Java對(duì)象方法,用于比較兩個(gè)對(duì)象是否相等。默認(rèn)情況下,equals()方法使用對(duì)象的引用比較來(lái)檢查兩個(gè)對(duì)象是否相等,也就是判斷兩個(gè)對(duì)象是否是同一個(gè)對(duì)象。但是可以在類(lèi)中覆蓋equals()方法,以便使用對(duì)象的內(nèi)容進(jìn)行比較。
Java中的hashCode()和equals()方法是密切相關(guān)的。在覆蓋equals()方法時(shí),通常也需要同時(shí)覆蓋hashCode()方法。因?yàn)楫?dāng)兩個(gè)對(duì)象相等時(shí),它們的哈希碼必須相等。因此,實(shí)現(xiàn)一個(gè)正確的hashCode()方法可以提高哈希表等數(shù)據(jù)結(jié)構(gòu)的性能。
下面是一個(gè)示例代碼,演示了hashCode()和equals()方法的用法:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Person)) {
return false;
}
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class Main {
public static void main(String[] args) {
Person a = new Person("John", 30);
Person b = new Person("John", 30);
System.out.println(a.equals(b)); // true
System.out.println(a.hashCode() == b.hashCode()); // true
}
}在上面的示例代碼中,Person類(lèi)覆蓋了equals()和hashCode()方法,以便使用對(duì)象的內(nèi)容進(jìn)行比較。在main()方法中,創(chuàng)建了兩個(gè)Person對(duì)象a和b,它們的內(nèi)容相同。調(diào)用equals()方法比較它們是否相等,返回true。同時(shí)調(diào)用hashCode()方法比較它們的哈希碼值是否相等,返回true。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計(jì)】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計(jì)連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營(yíng)】深圳跨境電商運(yùn)營(yíng)畢業(yè)22個(gè)工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個(gè)工作日,班級(jí)93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開(kāi)發(fā)】上海校區(qū)AI鴻蒙開(kāi)發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19