C 中 與Equals方法的區別

2022-08-31 17:48:10 字數 2138 閱讀 8653

string name;

public

string name

set

}public person(string name)

}class program

);string b = new

string(new

char );

console.writeline(a == b);

console.writeline(a.equals(b));

object g = a;

object h = b;

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 。

總結如下:

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 ); 則不一樣,它這是在託管堆上動態分配的位址。

C 中 與Equals方法的區別

usingsystem using system.collections.generic using system.linq using system.text set public person string name class program string b new string new c...

C 中 與Equals方法的區別

輸出結果 true true false true false false true true 總結如下 1 對於值型別,和equals等價,都是比較儲存資訊的內容。2 對於引用型別,比較的是引用型別在棧中的位址,equals方法則比較的是引用型別在託管堆中的儲存資訊的內容。3 對於string類要...

C 中 與Equals的區別

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