輸出成果:true ,true ,false ,true ,false ,false ,true ,true 。
總結如下:
1、對於值型別,==和equals等價,都是鬥勁儲存資訊的內容。
2、對於引用型別,==鬥勁的是引用型別在棧中的位址,equals辦法例鬥勁的是引用型別在託管堆中的儲存資訊的內容。
3、對於string類要特別處理懲罰,它是乙個內部已經處理懲罰好了equals辦法和==的類,故==和equals等價,都是鬥勁儲存資訊的內容。
4、對於一些自定義的類,我們有須要過載equals辦法,不然它預設為基類的equals辦法(基類沒有過載equals辦法例為object類中的equals辦法),他們的鬥勁也為位址,而不是引用型別在託管堆中的儲存資訊的內容。
故我們就不難懂得
以下輸出了:
person p1 = new person("jia");person p2 = new person("jia");
console.writeline(p1 == p2);//輸出false
console.writeline(p1.equals(p2));//輸出false
5、對於string我們有須要誇大一下常量字串與字串變數的差別,請看一下例子:
// 常量字串string x = "should it matter"; //指向同乙個位址,即所謂的常量池
string y = "should it matter";
object c = x;
object d = y;
console.writeline(c == d);//輸出true
console.writeline(c.equals(d));//輸出true
// 字串變數
string a = new string(new char );// 指向的位址不一樣,是動態分派的
string b = new string(new char );
object g = a;
object h = b;
console.writeline(g == h);//輸出false
console.writeline(g.equals(h));//輸出true
他們分派位址的體式格式不一樣,string x = "should it matter"; 因為它的初始值是乙個常量,所以其位址分派在託管堆上的靜態儲存區,即所謂的常量池,而樓主的string a = new string(new char ); 則不一樣,它這是在託管堆上動態分派的位址。
「 」「 Equals」之間的差別。
equals 方法只是在 system.object 中定義的乙個虛擬方法,它由任何選擇執行該任務的類所重寫。運算子是乙個可由類過載的運算子,該類通常具有恒等行為。對於未過載 的引用型別,該運算子會比較兩個引用型別是否引用同一物件,而這恰好是 system.object 中的 equals 實現所做...
C 中 與Equals的區別
c equals與 的區別 對於值型別,如果物件的值相等,則相等運算子 返回 true,否則返回 false。對於string 以外的引用型別,如果兩個物件引用同乙個物件,則 返回 true。對於 string 型別,比較字串的值。操作比較的是兩個變數的值是否相等。equals 方法比較的是兩個物件...
C 中 與Equals的區別
using system using system.collections.generic using system.text public string name set public person string name class program string b new string new...