equals和==方法比較(二)--Long中equals源碼分析


接上篇,分析equals方法在Long包裝類中的重寫,其他類及我們自定義的類,同樣可以根據需要重新equals方法。

equals方法定義

equals方法是Object類中的方法,java中所有的對象均繼承自Object類,也就繼承了equals方法,下面是Object類中equals方法的實現,

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

可以看到,equals方法使用的就是==的比較方式,那么如果是兩個引用類型,比較的當然是兩個引用地址。

java又規定所有繼承自Object的類都可以重寫equals方法,即實現自己的比較邏輯,但Long這個包裝類(其他的包裝類也是如此)沒有重寫了equals方法,而是進行了重載,如下

public boolean equals(Object obj) {
        if (obj instanceof Long) {
            return value == ((Long)obj).longValue();
        }
        return false;
    }

 首先,判斷傳入的obj的類型,是否為Long,否則直接返回false;

然后,對obj進行了強轉,調用longValue方法,下面看longVale()方法定義,

public long longValue() {
        return value;
    }

此方法返回的是value,那么value是什么那,value是Long包裝類型中的值,即

/**
     * The value of the {@code Long}.
     *
     * @serial
     */
    private final long value;

也就是Long的值

最后,使用==比較符進行比較,也就是兩個包裝類型Long中的value進行==比較,那么比較的就是字面量了。

以上就是Long中equals方法的分析,也就是說無論何時使用下面的代碼,都是返回的true,因為使用的equals,比較的是兩個value的值。

Long l1=123456l;
Long l2=123456l;
System.out.println("l1==l2"+l1.equals(l2));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM