C 中equal與 的區別

2022-06-19 22:45:22 字數 2994 閱讀 6430

** 

c#中,判斷相等有兩種方式,一種是傳統的==操作,一種是object提供的equals方法。二者的區別在於:

一、==操作符判斷的是堆疊中的值,equlas判斷的是堆中的值。

c#提供值型別和引用型別,值型別儲存在棧上,故用==判斷是直接判斷其值是否相等,因為值型別不存在堆中的資料,因此值型別的equals也是判斷資料。即,對於值型別而言,==與equals相同,均是判斷其值是否相等。

對於引用型別而言,其棧中儲存的是物件的位址,那麼==就是比較兩個位址是否相等,即是否指向同乙個物件;equals函式則是比較兩個物件在堆中的資料是否一樣,即兩個引用型別是否是對同乙個物件的引用。

二、string型別特殊

string型別雖然是引用型別,但是對string物件的賦值卻按照值型別操作。

例如:

string s1="hello";

string s2="hello";

對s2初始化的時候,並沒有重新開闢記憶體,而是直接將其位址指向s1的內容「hello」。這樣一來,string型別雖然是引用型別,但是其==操作和equals操作都是一樣的,均比較值是否相等。

三、與gethashcode()的關係

若兩物件equals相等,那麼其gethashcode()必定相等;但是反過來,若gethashcode()相等,那麼這兩個物件equals方法比較結果不一定相同。(為了獲取最佳效能,hash函式為物件內容生成的數字是隨機分布的,這就意味著,內容不同的物件,有可能生成的數字是一樣的,但可以認為這種概率非常小)。

下面示例說明:

using system;

using system.collections.generic;

using system.linq;

using system.text;

set

}public people(string name)

}class program

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

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

console.writeline("\n");

int32 m = 3;

int32 n = 3;

console.writeline(n == m);

console.writeline(n.equals(m));

console.writeline("\n");

object g = a;

object h = b;

console.writeline(g == h);

console.writeline(g.equals(h));

console.writeline(g.gethashcode() + " " + h.gethashcode());

console.writeline("\n");

people p1 = new people("jimmy");

people p2 = new people("jimmy");

console.writeline(p1 == p2);

console.writeline(p1.equals(p2));

console.writeline(p1.gethashcode() + " " + p2.gethashcode());

console.writeline("\n");

people p3 = new people("jimmy");

people p4 = p3;

console.writeline(p3 == p4);

console.writeline(p3.equals(p4));}}

}

執行結果如下:

true   true    true    true    false    true    -695839   -695839    false    false    46104728  12289376    true    true      請按任意鍵繼續. . .

在c#中,string 型別的特點有:

(1)屬於基本資料型別;

(2)是引用型別;

(3)唯讀;

(4) string a="1123";

string b="1123";

那麼a和b指向同乙個記憶體位址;

但是並非2個相同值相等的字串就對應同乙個記憶體位址;

(5)2個string 型別做「==」操作,先判斷記憶體位址是否相同,如果相同,則立即返回true;如果記憶體位址不相同,則繼續判斷值是否相同。

下面示例說明:

static void main(string args)

);string b = new string(new char );

console.writeline(a == b); //結果為true

console.writeline(a.equals(b));//結果為true

object g = a;

object h = b;

console.writeline(g == h);//結果為false

console.writeline(g.equals(h));//結果為true

person p1 = new person("csw");

person p2 = new person("csw");

console.writeline(p1 == p2);//結果為false

console.writeline(p1.equals(p2));//結果為false

person p3 = new person("csw");

person p4 = p3;

console.writeline(p3 == p4);//結果為true

console.writeline(p3.equals(p4));//結果為true

console.readline();

}

********** end

C 中equal與 的區別

轉 c 中,判斷相等有兩種方式,一種是傳統的 操作,一種是object提供的equals方法。二者的區別在於 一 操作符判斷的是堆疊中的值,equlas判斷的是堆中的值。c 提供值型別和引用型別,值型別儲存在棧上,故用 判斷是直接判斷其值是否相等,因為值型別不存在堆中的資料,因此值型別的equals...

java中 與 equal 的區別

看一段 string str1 new string str string str2 new string str system.out.println 比較 str1 str2 system.out.println equal比較 str1.equals str2 結果 比較 false equa...

java 與equal 的區別

判定的是物件的等價性,必須是實實在在地是同乙個物件才返回true。判定基本型的值是否相等。int i1 47 int i2 47 system.out.println i1 i2 output true 基本型包裝類 integer n1 new integer 47 integer n2 new ...