C equals 本質理解

2021-09-12 09:52:49 字數 1592 閱讀 4073

using

system;

using

system.diagnostics;

using

system.text;

using

system.collections;

using

system.collections.generic;

class

test

class cdefoveride //

c# 的所有類都預設繼承於object,這裡不用寫繼承,也可以寫,有點詭異

}static

void

main()

);string sb = new

string(new

char );

print(sa.gethashcode() + "

," +sb.gethashcode());

print(sa.equals(sb));

//true,呼叫string.equals(string)

print(sa == sb);//

true,string的operator ==

object oa =sa;

object ob =sb;

print(oa.equals(ob));

//true, 多型呼叫,實際呼叫的是string.equals(object)

print(oa == ob); //

false

object oc = new

object

();

object od = new

object

(); print(oc.equals(od));

//false, object.equals(object)

print(oc == od);//

false

//如果沒有實現重寫,對於引用型別,那麼原始的object.equals()與 ==沒有任何區別,二者總能得到一樣的結果

//因為引用型別其實是乙個指標,==比較的是指標的值,也就是位址,equals比較的也是位址。

//string類重寫了==和equals,實現了字串內容的比較,而非位址的比較。

object o1 = new

cdefoveride();

object o2 = new

cdefoveride();

print(o1.equals(o2));

//false, 多型呼叫, cdefoveride.equals(object)

int ia = 12

;

short isa = 12

; print(ia.equals(isa));

//true, short可以轉為int,故多型呼叫int32.equals(int32 obj)

print(isa.equals(ia)); //

false, int不能直接轉為short,故多型呼叫int16.equals(object obj)

}}

posted on 2016-11-04 23:21收藏

c equals與 的區別

對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件的內容是否一致 equals...

c Equals和 的區別

值型別是儲存在記憶體中的堆疊 以後簡稱棧 而引用型別的變數在棧中僅僅是儲存引用型別變數的位址,而其本身則儲存在堆中。操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中儲存的位址是否相同,即棧中的內容是否相同。equals操作表示的兩個變數是否是對同乙個物件的引用,即堆中的內容是否...

sizeof 理解 原理 本質 用法

sizeof 不是操縱符,也不是函式,因為在執行階段沒有它,它沒有被編譯成機器 指令。可以把它看做乙個巨集。sizeof 在編譯期間就處理完成了。所以像size a 3 這種,a是不會被賦值的。a還是原來的值。cout 在理解了sizeof這些原理後,基本用法就好理解,只要把握好它作用在編譯階段就不...