public boolean equals(object obj)
public native int hashcode()
public string tostring()
protected native object clone() throws clonenotsupportedexception
protected void finalize() throws throwable
類的方法前加final關鍵字,說明該方法不能被該類的子類重寫。
如果類具有自己特有的「邏輯相等」概念(不同於物件等同的概念),而且超類還沒有覆蓋equals以實現期望的行為,這時候我們就需要覆蓋equals方法。
equals方法實現了等價關係:自反性,對稱性,傳遞性,一致性,非空性(x.equals(null)返回為false
)
classstudent
}
1、編寫完成equals方法之後,應該問自己三個問題:它是否對稱的、傳遞的、一致的。
2、不要將equals宣告中的object物件替換為其他的型別
publicboolean equals(student obj)
這樣相當於過載了equals方法,而非是覆蓋。
hashcode有一條約定如下:
如果兩個物件根據equals(object)方法比較是相等,那麼呼叫這兩個物件中任意乙個物件的hashcode方法都必須產生同樣的整數結果。
下面給出一種簡單的解決辦法:
把某個非零的常數值,比如說17,儲存在乙個名為result的int型別的變數中。
對於物件每個關鍵域f(指equals方法中涉及的每個域),完成以下步驟:
如果該域是boolean型別,則計算(f ? 1 : 0)。
privateboolean flag=true
;int booltemp=flag?0:1;
如果該域是byte、char、short或者int型別,則計算(int)f。
如果該域是float型別,則計算float.floattointbit(f)。
如果該域是long型別,則計算(int)(f ^ (f >>> 32))。
如果該域是double型別
privatedouble
height;
long heightbits=double.doubletolongbits(height);
int heighttemp=(int)(heightbits ^ (heightbits >>> 32));
如果該域是乙個物件引用,並且該類的equals方法通過遞迴呼叫equals的方式來比較這個域,則同樣為這個域遞迴呼叫hashcode。
privatestring name;
int stringtemp=this.name.hashcode();
完整的student類:
classstudent
@override
public
inthashcode()
}
如何理解 和equals方法
操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本型別的資料或兩個引用變數是否相等,只能用 操作符。如果乙個變數指向的資料是物件型別的,那麼,這時候涉及了兩塊記憶體,物件本身占用一塊記憶體 堆記憶體 變數也占用一塊記憶體,例如 objet ...
Equals 和 的區別
對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件的內容是否一致 equals...
equals 和 的區別
equals 方法 是string類從它的超類object中繼承的 被用來檢測兩個物件是否相等,即兩個物件的內容是否相等。用於比較引用 和 比較基本資料型別時具有不同的功能 1.比較基本資料型別,如果兩個值相同,則結果為true 2.而在比較引用時,如果引用指向記憶體中的同一物件,結果為true s...