0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

java的equals怎么用

科技綠洲 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2023-11-17 16:56 ? 次閱讀

Java的equals()方法是Object類中的方法,用于比較對象的內(nèi)容是否相等。在默認(rèn)情況下,equals()方法比較的是對象的引用,即判斷兩個對象是否是同一個實例。但是在很多情況下,我們希望比較的是對象的屬性是否相等,這就需要重寫equals()方法。

在Java中,equals()方法的默認(rèn)實現(xiàn)如下:

public boolean equals(Object obj) {
return (this == obj);
}

上述代碼中,equals()方法將當(dāng)前對象和傳入的對象進(jìn)行引用比較,如果兩個對象的引用相同,則返回true,否則返回false。但是這種引用比較并不滿足我們的實際需求,因為我們更關(guān)心對象的屬性是否相等。

下面是重寫equals()方法的一般步驟:

  1. 首先,需要判斷傳入的對象是不是當(dāng)前類的實例,否則直接返回false。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
// ...
}
  1. 然后,將傳入的對象轉(zhuǎn)為當(dāng)前類的實例。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}

MyClass myObj = (MyClass) obj;
// ...
}
  1. 接下來,比較兩個對象的屬性是否相等。這里需要根據(jù)具體情況來判斷哪些屬性應(yīng)該被比較。
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}

MyClass myObj = (MyClass) obj;

// 比較屬性是否相等
if (this.field1 != myObj.field1) {
return false;
}
if (!this.field2.equals(myObj.field2)) {
return false;
}
// ...

return true;
}

在上述代碼中,我們比較了兩個對象的field1和field2屬性是否相等,如果不相等則返回false。

  1. 最后,要確保equals()方法滿足以下特性:
  • 自反性:對于任何非null的引用值x,x.equals(x)應(yīng)該返回true。
  • 對稱性:對于任何非null的引用值x和y,如果x.equals(y)返回true,則y.equals(x)也應(yīng)該返回true。
  • 傳遞性:對于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也應(yīng)該返回true。
  • 一致性:對于任何非null的引用值x和y,如果對象中的屬性沒有發(fā)生變化,那么多次調(diào)用x.equals(y)應(yīng)該返回相同的結(jié)果。
  • 對于任何非null的引用值x,x.equals(null)應(yīng)該返回false。

綜上所述,重寫equals()方法時需要按照上述步驟來進(jìn)行,確保比較的是對象的屬性相等性,并滿足equals()方法的特性。這樣,我們就可以根據(jù)自己的需求來定義兩個對象是否相等了。

public class MyClass {
private int field1;
private String field2;

// 構(gòu)造方法、Getter和Setter方法等...

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}

MyClass myObj = (MyClass) obj;

// 比較屬性是否相等
if (this.field1 != myObj.field1) {
return false;
}
if (!this.field2.equals(myObj.field2)) {
return false;
}

return true;
}

// ...
}

這樣,我們就可以根據(jù)重寫后的equals()方法來判斷兩個對象是否相等了。

MyClass obj1 = new MyClass(1, "hello");
MyClass obj2 = new MyClass(1, "hello");

System.out.println(obj1.equals(obj2)); // 輸出:true

需要注意的是,當(dāng)我們重寫equals()方法時,通常也需要重寫hashCode()方法。因為根據(jù)Java規(guī)范,如果兩個對象通過equals()方法相等,那么它們的hashCode()方法的返回值也應(yīng)該相等。否則,它們的行為在使用基于散列的集合類(例如HashMap、HashSet等)時可能是不正確的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104089
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67764
收藏 人收藏

    評論

    相關(guān)推薦

    java rules下載/java規(guī)范中文版

    對于希望精通Java編程語言復(fù)雜細(xì)節(jié)的應(yīng)用程序員來說,本書是一本全面的參考書,內(nèi)容詳盡,深入淺出。本書徹底地講述了Java編程語言和Java虛擬機(JVM)的核心細(xì)節(jié),使讀者能夠有效地深入
    發(fā)表于 06-23 18:16

    詳解java代碼優(yōu)化方法

    使用LinkedList27. 不要讓public方法中有太多的形參28. 字符串變量和字符串常量equals的時候?qū)⒆址A繉懺谇懊?9. 在java中if (i == 1)和if (1 == i
    發(fā)表于 04-02 15:43

    Hanlp分詞實例:Java實現(xiàn)TFIDF算法

    下):代碼實現(xiàn)package edu.heu.lawsoutput;import java.io.BufferedReader;import java.io.BufferedWriter;import
    發(fā)表于 11-14 10:03

    Labview執(zhí)行系統(tǒng)命令打開bat腳本(執(zhí)行JAVA),JAVA閃退,報一下錯誤

    Labview執(zhí)行系統(tǒng)命令打開bat腳本(執(zhí)行JAVA),JAVA閃退,報一下錯誤Exception in thread "main"
    發(fā)表于 09-05 10:56

    如何用java映射創(chuàng)建java對象和調(diào)用java對象呢

    java是一種解析語言,java程序是通過java虛擬機解析.class的方式運行起來。因此,java中就存在java映射的概念。下面介紹如
    發(fā)表于 04-11 14:43

    java語言編寫的智能五子棋源程序

    java語言編寫的智能五子棋源程序
    發(fā)表于 10-30 10:31 ?98次下載
    <b class='flag-5'>用</b><b class='flag-5'>java</b>語言編寫的智能五子棋源程序

    JAVA語言實現(xiàn)RSA公鑰密碼算法

    JAVA語言實現(xiàn)RSA公鑰密碼算法:本文闡述了公開密鑰密碼體制RSA算法的原理及實現(xiàn)技術(shù)。并在此基礎(chǔ)上,給出了JAVA語言實現(xiàn)的RSA算法源代碼。關(guān)鍵詞:ILSA體制;公鑰;密鑰
    發(fā)表于 02-10 10:27 ?58次下載

    JAVA版聊天軟件源代碼

    JAVA版聊天軟件源代碼 一款JAVA制作開發(fā)的小型聊天軟件,里面附有安裝程序和JAVA源代碼。.rar
    發(fā)表于 03-11 14:21 ?0次下載

    java與c之間的數(shù)據(jù)交互

    最近作一個tiemsten數(shù)據(jù)庫的項目,用到了jni技術(shù)。在這個項目中,我們java來寫界面和業(yè)務(wù)邏輯,c語言寫數(shù)據(jù)庫odbc訪問。單純的odbc其實沒有什么難的,但是在java
    發(fā)表于 11-27 10:22 ?1750次閱讀

    Java11GC 性能基準(zhǔn)測試報告 Java8與Java11對比測試

    當(dāng)前使用量最大的 Java 版本是 8,所以測試者 Java 8 與 Java 11 進(jìn)行對比測試。GC 是影響 Java 性能的關(guān)鍵因素
    發(fā)表于 02-01 01:46 ?3559次閱讀

    SpringBoot正式棄Java8 Java17將成為未來主流版本

    Java基線從 Java 8 提升到了 Java 17 從Java EE APIs 到 Jakarta EE 這個支持被移除 依賴升級 未來計劃 參考資料 2022年1月20日,Spr
    的頭像 發(fā)表于 10-09 18:03 ?3519次閱讀

    Java中的計時攻擊

    執(zhí)行時間反推出密碼的一些區(qū)域 。 簡單理解,就是破解密碼的人,通過不同的輸入策略組合嘗試去驗證密碼,得到不同的執(zhí)行時間,從而反推出密碼的區(qū)域,降低破解密碼的難度。 下面可以使用Java簡單描述一下。 我們看一下Java中的String
    的頭像 發(fā)表于 09-25 15:29 ?580次閱讀
    <b class='flag-5'>Java</b>中的計時攻擊

    Javaequals 方法的實現(xiàn)方式

    Javaequals 方法用于比較兩個對象是否相等。在默認(rèn)情況下,Object 類中的 equals 方法實現(xiàn)是比較兩個對象的引用是否相等,即比較內(nèi)存地址是否相同。然而,對于自定義對象,在很多
    的頭像 發(fā)表于 11-17 16:53 ?721次閱讀

    javaequals()方法的注意事項

    Java中的equals()方法是用于比較兩個對象是否相等的方法。這個方法是在Object類中定義的,因此所有的Java類都默認(rèn)地繼承了equals()方法。然而,
    的頭像 發(fā)表于 11-17 16:59 ?625次閱讀

    java中的equals是什么意思

    Java中,equals是一個用于比較對象是否相等的方法。該方法來自于Object類,所有的Java類都繼承了該方法。equals方法的默認(rèn)行為是比較對象的內(nèi)存地址,即判斷兩個對象是
    的頭像 發(fā)表于 11-17 17:07 ?2376次閱讀