1. 程式人生 > >數值型 重寫 equals方法

數值型 重寫 equals方法

 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;
}