對於值型別,如果物件的值相等,則相等運算子 (==) 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 == 返回 true。對於 string 型別,== 比較字串的值。
==操作比較的是兩個變數的值是否相等。
equals()方法比較的是兩個物件的內容是否一致.equals也就是比較引用型別是否是對同乙個物件的引用。
對於值型別的比較,這裡就不做描述了,下面討論引用型別的比較:
首先我們看一段程式
複製** **如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace consoleapplication1
**pmjhf set
}public person(string name)
}}複製** **如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace consoleapplication1程式設計客棧
); string b = new string(new char );
&n console.writeline(a == b);
console.writeline(a.equals(b));
object g = a;
object h = b;
www.cppcns.com; console.writeline(g == h);
console.writeline(g.equals(h));
person p1 = new person("jia");
person p2 = new person("jia");
console.writeline(p1 == p2);
console.writeline(p1.equals(p2));
person p3 = new person("jia");
person p4 = p3;
console.writeline(p3 == p4);
console.writeline(p3.equals(p4));
console.readline();}}
}執行程式,會輸出什麼呢?
答案是 true,true,false,true,false,false,true,true。
為什麼會出現這個答案呢?因為值型別是儲存在記憶體中的堆疊(以後簡稱棧),而引用型別的變數在棧中僅僅是儲存引用型別變數的位址,而其本身則儲存在堆中。
==操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中儲存的位址是否相同,即棧中的內容是否相同。
equals操作表示的兩個變數是否是對同乙個物件的引用,即堆中的內容是否相同。
而字串是乙個特殊的引用型型別,在c#語言中,過載了string 物件的很多方法方法(包括equals()方法),使string物件用起來就像是值型別一樣。
因此在上面的例子中,字串a和字串b的兩個比較是相等的。
對於object g 和object h 時記憶體中兩個不同的物件,所以在棧中的內容是不相同的,故不相等。而g.equals(h)用的是sting的equals()方法故相等(多太)。如果將字串a和b作這樣的修改:
string a="aa";
string b="aa";
則,g和h的兩個比較都是相等的。這是因為系統並沒有給字串b分配記憶體,只是將"aa"指向了b。所以a和b指向的是同乙個字串(字串在這種賦值的情況下做了記憶體的優化)。
對於p1和p2,也是記憶體中兩個不同的物件,所以在記憶體中的位址肯定不相同,故p1==p2會返回false,又因為p1和p2又是對不同物件的引用,所以p1.equals(p2)將返回false。
對於p3和p4,p4=p3,p3將對物件的引用賦給了p4,p3和p4是對同乙個物件的引用,所以兩個比較都返回true。
如果我們對person的equals方法重寫:
複製** **如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace consoleapplication1
set
}public person(string name)
public override bool equals(object obj)
}}那麼p1.equals(p2),就會返回true。
本文標題: c#基礎:equals()與運算子==的區別分析
本文位址:
運算子與equals方法
1 運算子 person p1 new person person p2 new person if p1 p2 false p1 p2 如果有這樣的賦值語句後 if p1 p2 true 注意 當基本資料型別使用 進行比較時,符號兩邊的資料必須型別相容 型別相同或可自動型別轉換 否則編譯出錯 pe...
C 基礎加強一 Equals 和運算子 區別
對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件的內容是否一致 equals...
和equals比較運算子
兩者使用時注意如下用法 1.當使用 來判斷兩個變數是否相等時,如果2個變數是基本型別的變數,且都是數值型 不一定要求資料型別嚴格形同 則只要兩個變數的值相等,將返回true 2.當使用 來判斷兩個引用型別的變數,必須它們指向同乙個物件時,才會返回true 3.string的equals方法判斷兩個字...