數值型 重寫 equals方法
阿新 • • 發佈:2018-11-21
public static void main(String[] args) {
Integer p = 10000;
Integer q = 10000;
System.out.println(p == q);
System.out.println(p.equals(q));
}
---------------------執行結果----------------------
false
true
結果分析:
- Integer的快取還記嗎?10000太大,常量池的快取只存了-128到127。所以p != q。
- Integer等數值型重寫了equals方法(見下面原始碼),使得Integer的equals方法比較的是值,而不是記憶體地址,就像字串String一樣。
/**
* 原始碼
* A.equals(B) 比較兩個物件A和B。
* 當且僅當B非空,而且B是個值和A的值相等的Integer物件時,A和B相等。
*/
public boolean equals(Object obj) {
if (obj instanceof Integer) { //instanceof判斷obj是否是Integer的一個例項物件
return value == ((Integer)obj).intValue();
}
return false;
}