重寫Equals 的區別

2021-09-24 21:51:45 字數 1038 閱讀 1400

以c#為例。

同一性:x.equals(x)為true,通過referenceequals(this, obj)實現;

自反性:x.equals(y) == y.equals(x),通過this.gettype() == obj.gettype()判斷型別是否相同,再進一步對屬性進行判斷;

傳遞性:if x.equals(y) == true && yequals(z) == true,then x.equals(z) == true;

x.equals(null)必須返回false,通過referenceequals(obj, null)實現。

一般equals判斷內容,==判斷位址;

在object基類中,equals呼叫==,所以也是判斷的位址;

重寫equals而不過載==,不會有警告,且此時呼叫==的話其實是呼叫的object的==,而不會呼叫重寫的equals

過載==而不重寫 equals,會有警告,且此時呼叫equals會呼叫過載的==

不要在過載==的時候通過a==null、b==null、a==b的方式來判斷引用的相等性,這會引起呼叫的死迴圈,用referenceequals(a,b)來代替。

過載==、!=成對出現;重寫了equals就必須重寫gethashcode以保證高層模組的正確呼叫。

public class node

public string birth

public override bool equals(object obj)

public override int gethashcode()

public static bool operator ==(inoculatornode i1, inoculatornode i2)

public static bool operator !=(inoculatornode i1, inoculatornode i2)

}

和equals的區別及重寫

1.共同點 都可以做比較,返回值都是boolean 2.不同點 1,是比較運算符號,既可以比較基本資料型別,也可以比較引用資料型別,基本資料型別比較的是值,引用資料型別比較的是位址值 2,equals方法只能比較引用資料型別,equals方法在沒有重寫之前,比較的是位址值,底層依賴的是 號,但是比較...

C 區別對待 和Equals,重寫Equals

clr中將 相等性 分為兩類 值相等性 和 引用相等性 值相等性 兩個變數所包含的數值相等。引用相等性 兩個變數引用的是記憶體中的同乙個物件。無論是操作符 還是方法 equals 都傾向於表達這樣乙個原則 對於值型別,如果型別的值相等,就應該返回true 對於引用型別,如果型別指向同乙個物件,則返回...

equals 的重寫規則

自反性 對於任何非null的引用值x,x.equals x 應返回true。對稱性 對於任何非null的引用值x與y,當且僅當 y.equals x 返回true時,x.equals y 才返回true。傳遞性 對於任何非null的引用值x y與z,如果y.equals x 返回true,y.equ...