標籤:style blog color strong 資料 line
在c#中判斷對象相等,這是對參考型別進行判斷,而不是對實值型別,如果是對字串,或者是數值進行判斷相等只需要用==運算子就可以了。
對兩個對象用==運算子,只能判斷他們兩個在記憶體中的地址是否一樣的。
1.對一個類只執行個體化一次
向那些賦值來賦值去的引用如果沒有new執行個體化一個對象的話,那麼這些賦值來,賦值去的對象指向的都是同一地址。舉一個例子有一個類People
People p1=new People();People p2=p1;People p3;p3=p2;
像這樣對象p1 ,p2,p3 ,是完全指向的同一的記憶體位址,他們實際上是同一個對象,所有用==或者用equal方法判斷都是返回true;
2、對一個類執行個體化多次但是每次執行個體的初值都是一樣的
申明兩個對象,每個對象都執行個體化一次,並且把每個類的資料即欄位或者屬性都是設定統一初始值,如下:
People p1=new People();p1.Name="haha";People p2 =new People();p2.Name="haha";
假設People類是有一個屬性就是Name,那麼我將這p1,p2兩個對象都執行個體化了,但是把用p1==p2得到的卻是false,這就更加印證了對象用==運算子,只能是對對象名的引用地址進行比較,像這種,兩次執行個體化,那麼在記憶體空間中就分配了不一樣的空間,即不同的地址,雖然他們內容中中的資料是一樣。
注意:但是我們就是要比較對象在記憶體中的各個資料都要相等則是相等,而不是比較記憶體位址,該怎麼辦。
我們都知道如果兩者的記憶體的地址都相等了,那麼兩個對象實質上是同一個對象,只是這兩個對象在程式中擁有不同的名字而已,如果想比較不同對象是否相等(不是指地址相等)。就應該重寫Object對象的Equal方法,在裡面具體判斷兩個對象的各個資料是否相等,如果相等返回true,只要有一項不相等則返回false。具體執行個體就不示範了。
如果有說的不對的,或者不好的地方,希望各位能夠指正。