equals和==方法比較(二)--Long中equals原始碼分析
阿新 • • 發佈:2019-01-09
接上篇,分析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() { returnvalue; }
此方法返回的是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));