在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。具體實例就不演示了。
如果有說的不對的,或者不好的地方,希望各位能夠指正。