成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來(lái)到九壹網(wǎng)。
搜索
您的當(dāng)前位置:首頁(yè)equals方法使用技巧

equals方法使用技巧

來(lái)源:九壹網(wǎng)

==equals的區(qū)別

  • 值類型(int,char,long,boolean等)都是用==判斷相等性。對(duì)象引用的話,==判斷引用所指的對(duì)象是否是同一個(gè)。
  • equals是Object的成員函數(shù),有些類會(huì)覆蓋(override)這個(gè)方法,用于判斷對(duì)象的等價(jià)性。

例如String類,兩個(gè)引用所指向的String都是”abc“,但可能出現(xiàn)他們實(shí)際對(duì)應(yīng)的對(duì)象并不是同一個(gè)(和jvm實(shí)現(xiàn)方式有關(guān)),因此用==判斷他們可能不相等,但用equals判斷一定是相等的??傮w來(lái)說(shuō)要搞清楚,還是需要先理解清楚對(duì)象實(shí)體和引用之間的關(guān)系。

instanceof

instanceof是Java、php的一個(gè)二元操作符(運(yùn)算符),和==,>,<是同一類東西。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是判斷其左邊對(duì)象是否為其右邊類的實(shí)例,返回boolean類型的數(shù)據(jù)??梢杂脕?lái)判斷繼承中的子類的實(shí)例是否為父類的實(shí)現(xiàn)。相當(dāng)于c#中的is操作符。java中的instanceof運(yùn)算符是用來(lái)在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過(guò)返回一個(gè)布爾值來(lái)指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。

相等測(cè)試與繼承

如果隱式和顯式參數(shù)不屬于同一個(gè)類,equals方法將如何處理呢?

public class Employee {
    private String name;
    private String hireDay;
    private int salary;


    public boolean equals(Object otherObject) {
        //首先簡(jiǎn)單的測(cè)試一下對(duì)象是否相等
        if(this ==otherObject) return true;

        //判空
        //如果這里不進(jìn)行判空,會(huì)出現(xiàn)什么后果
        if(otherObject ==null) return false;

        //如果對(duì)象所屬類不匹配,則他們不相等
        if(getClass() != otherObject.getClass()) return false;

        Employee other = (Employee) otherObject;

        //判斷對(duì)象里面的內(nèi)容是否相等
        //若果在構(gòu)造對(duì)象時(shí),沒(méi)有對(duì)里面一個(gè)或者多個(gè)內(nèi)容進(jìn)行賦值,即有些內(nèi)容為null,這里或出現(xiàn)什么后果?
        return name.equals(other.name)
                &&salary == other.salary
                &&hireDay.equals(other.hireDay);
    }

}

java語(yǔ)言的規(guī)范要求equals方法具有下面的特性

  • 對(duì)稱性: 對(duì)于任何引用x和y,當(dāng)且僅當(dāng)x.equals(y)返回是“true”,那么y.equals(x)也應(yīng)該返回是“true” ;

這里有一個(gè)問(wèn)題:首先假設(shè)一個(gè)類的對(duì)象為y,其子類的對(duì)象為x,加入在equals中使用instanceof進(jìn)行比較
y.equals(x);中會(huì)返回true;
然而:x.equals(y) 會(huì)返回false
這不符合equals的對(duì)稱性?。?!
建議:
如果子類能夠擁有自己的相等概念,則對(duì)稱性需求將強(qiáng)制采取getClass進(jìn)行檢測(cè)

如果由超類決定相等的概念,那么就可以使用instanceof進(jìn)行檢測(cè),這樣可以在不同的子類的對(duì)象之間進(jìn)行相等的比較。

  • 自反性: 對(duì)于任何非空引用x,x.equals(x)應(yīng)該返回“true” ;

  • 傳遞性: 對(duì)于任何引用x和y,如果x.equals(y)返回是“true”,y.equals(z)返回是“true”,那么z.equals(x)也應(yīng)該返回是“true” ;

  • 一致性: 如果x和y引用的對(duì)象沒(méi)有發(fā)生變化,反復(fù)調(diào)用x.equals(y)應(yīng)該返回同樣的結(jié)果

  • 對(duì)于任意非空引用x,x.equals(null)應(yīng)該返回false。

編寫一個(gè)完美的equals方法的建議

轉(zhuǎn)載于:https://www.cnblogs.com/lanaiwanqi/p/10445655.html

因篇幅問(wèn)題不能全部顯示,請(qǐng)點(diǎn)此查看更多更全內(nèi)容

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2

違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)