和Equal 的區別

2022-02-22 16:09:01 字數 548 閱讀 3718

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

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

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

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

二、string型別特殊

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

例如:

string s1="hello";

string s2="hello";

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

和 equal 的區別

public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...

equal和「 」的區別

對於基本資料型別,判斷兩個變數的值是否相等。equal 不能用於基本資料型別。只能用於類變數。對於基本資料型別要用其包裝類。因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等...

equal和「 」的區別

因為物件變數的儲存的是物件在記憶體中的路徑,即記憶體位址。所以用 比較時,即使物件的值相等,但是他們的記憶體位址不同,所以 的結果為false。故 用於比較兩個變數的值是否相等,而不是變數引用的物件是否相等。equal用於比較兩個物件是否相同型別,值是否相等。總之 比較的是值 變數 棧 記憶體中存放...