一、Object類簡介
java.lang包中定義的Object類是所有Java類的根父類,其中定義了一些實現和支援物件導向機制的重要方法。任何Java物件,如果沒有父類,就預設它繼承了Object類。因此,實際上,以前的定義是下面的簡略:
public class A extends Object{}
二、equals方法
Object類定義的equals方法用於判別某個指定的物件與當前物件(呼叫equals方法的物件)是否等價。資料等價的基本含義是指兩個資料的值相等。
三、equals方法與“==”運算子的關係
1、equals()方法只能比較引用型別,“==“可以比較引用型別及基本型別;
2、預設的equals()方法比較的是記憶體地址,基本等同於”==“,但對於類File、String、Date及包裝類來說,是比較的值而不是記憶體地址,這是因為它們內部覆蓋實現了equals()方法;
3、”==“進行比較的時候,引用型別資料比較的是引用即記憶體地址,基本資料型別比較的是值。它是會自動的去進行轉換的。
四、覆蓋equals()方法
覆蓋之前equals和==比較的都是記憶體地址,覆蓋equal的一般步驟如下:
(1)、用==檢查是否引數就是這個物件的引用;
(2)、判斷要比較的物件是否為null,如果是null,返回false;
(3)、用instanceof判斷引數的型別是否正確;
(4)、把引數轉換成合適的型別;
(5)、比較物件屬性值是不是匹配。
private String uuid;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
T3 other = (T3) obj;
if (uuid == null) {
if (other.uuid != null)
return false;
} else if (!uuid.equals(other.uuid))
return false;
return true;
}
重要規則:覆蓋equals()應該連帶覆蓋hashcode()
五、什麼是hashCode?
實際上,由Object類定義的hashCode方法確實會針對不同的物件返回不同的整數。(這一般是通過將該物件的內部地址轉換成一個整數來實現的,但是Java程式語言不需要這種實現技巧)你可以這樣理解hashCode,它獲取物件在記憶體中的地址並加以某種演算法而計算得來,它是物件的雜湊碼值。主要用來在集合中實現快速查詢等操作,也可以用於物件的比較。
在Java中對hashCode的規定如下:
1、在同一個應用程式執行期間,對同一個物件呼叫hashCode(),必須返回相同的整數結果。至於同一個應用程式在不同執行期所得的結果無需一致;
2、如果兩個物件被equals(Object)方法視為相等,那麼對這兩個物件呼叫hashCode()必需返回相同的整數結果;
3、如果兩個物件被equals(Object)方法視為不相等,那麼對這兩個物件呼叫hashCode()必須獲得相同的整數結果。